Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
Przesunięty przez: Tajan
09-12-2020, 11:32
makro excel javascript
Autor Wiadomość
drsnou
Świeżak


Wersja: Mac Office 2016
Posty: 6
Wysłany: 07-12-2020, 11:59   makro excel javascript

Witam, Chciałbym zastosować działające, proste makro z Excela w Arkuszu Google, który korzysta z JavaScript. Niestety nie mam pomysłu jak to "przekonwertować"

Kod:
Sub usuwanie_wierszy()

wiersz_pocz = 6
wiersz_kon = 30
sprawdz_kolumna = "N"

For i = wiersz_kon To wiersz_pocz Step -1
If Cells(i, sprawdz_kolumna) = "TRUE" Then Rows(i).Delete
Next

End Sub
ID posta: 396182 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2498 razy
Posty: 8314
Wysłany: 07-12-2020, 14:11   

Jeśli w kolumnie "N" masz wartości logiczne to:
Kod:
function deleteRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var r = ss.getRange('N:N');
  var v = r.getValues();
  var od_ = 6;
  var do_ = 30;
  var x = new Boolean(true)
  for(var i=do_;i>=od_;i--)
    if(v[0,i]= x)
      ss.deleteRow(i+1);
};
natomiast jeśli są to teksty to:
Kod:
function deleteRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var r = ss.getRange('N:N');
  var v = r.getValues();
  var od_ = 6;
  var do_ = 30;
  for(var i=do_;i>=od_;i--)
    if(v[0,i]= 'TRUE')
      ss.deleteRow(i+1);
};
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 396189 Skopiuj do schowka
 
 
drsnou
Świeżak


Wersja: Mac Office 2016
Posty: 6
Wysłany: 08-12-2020, 07:26   

Wartości logiczne. Dziękuję za kod: działa po zmodyfikowaniu zakresów kolumny 'N'.

EDIT: Działało tylko dla wartości początkowych w kolumnie 'N'. Przy późniejszej modyfikacji ich wartości zapamiętywało pierwsze stany i nie reagowało na kolejne zmiany.

Docelowo chciałbym zrobić aby usuwane były z arkusza A i jednocześnie przenoszone do arkusza B (jako archiwum). Proszę o propozycję rozwiązania.
ID posta: 396218 Skopiuj do schowka
 
 
drsnou
Świeżak


Wersja: Mac Office 2016
Posty: 6
Wysłany: 08-12-2020, 08:11   

Sprawdziłem w innym arkuszu i jednak nie działa opcja BOOLEAN ani STRING

Kod:
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var r = ss.getRange('N8:N10');
  var v = r.getValues();
  var od_ = 8;
  var do_ = 10;
  for(var i=do_;i>=od_;i--)
    if(v[0,i]= 'TRUE')
      ss.deleteRow(i+1);


Usuwa wiersze 11,10,9 bez względu na to co jest w komórkach N10,N9,N8
ID posta: 396221 Skopiuj do schowka
 
 
drsnou
Świeżak


Wersja: Mac Office 2016
Posty: 6
Wysłany: 08-12-2020, 08:42   

Kod:
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Arkusz1');
  var r = s.getRange('A:A');
  var v = r.getValues();
  for(var i=v.length-1;i>=0;i--)
    if(v[0,i]==5)
      s.deleteRow(i+1);


Działa poprawnie, lecz jeśli if(v[0,i]==5) zamienimy na if(v[0,i]=="$B1$"), gdzie w komórce B1 jest wartość 5 to wtedy nie działa. Tak samo w moim przypadku z wartościami tekstowymi/logicznymi.
ID posta: 396224 Skopiuj do schowka
 
 
Tajan


Pomógł: 4740 razy
Posty: 10426
Wysłany: 08-12-2020, 12:32   

Tak spróbuj:
Kod:
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Arkusz1');
  var r = s.getRange('A:A');
  var v = r.getValues();
  var x = s.getRange('B1').getValue();

  for(var i=v.length-1;i>=0;i--) {
    if(v[0,i]==x) {
      s.deleteRow(i+1);
    }
   }
ID posta: 396235 Skopiuj do schowka
 
 
drsnou
Świeżak


Wersja: Mac Office 2016
Posty: 6
Wysłany: 08-12-2020, 13:37   

Działa, lecz nadal jest problem jeśli pętla if porównuje wartości z danymi typu string lub boolean - wtedy nie działa.


Kod:
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Arkusz1');
  var r = s.getRange('N:N');
  var v = r.getValues();
 // var x = s.getRange('B1').getValue();
  var x = new Boolean(true);

  for(var i=v.length-1;i>=0;i--) {
    if(v[0,i]==x) {
      s.deleteRow(i+1);
    }
  }
ID posta: 396237 Skopiuj do schowka
 
 
drsnou
Świeżak


Wersja: Mac Office 2016
Posty: 6
Wysłany: 09-12-2020, 09:41   

Zamieszczam skrypt taki o który mi chodziło:
Przenosi wybrane wiersze z arkusza A do arkusza B, gdy w arkuszu A wiersz X kolumny N zawiera tekst "Wysłane" a następnie usuwa dane wiersz z arkusza A. W arkuszu B kolejne pozycja są dodawane poniżej.

Kod:
function archiwizuj_dane() {
  var source = SpreadsheetApp.getActiveSpreadsheet();
  source.setActiveSheet(source.getSheetByName('Zamówienia'), true);
  var lastRow = source.getLastRow();
  var source_sheet = source.getSheetByName('Zamówienia');
  var target_sheet = source.getSheetByName('Archiwum');

  var source_range = source_sheet.getDataRange();
  var target_range = target_sheet.getDataRange();

  var i = 1;
  while (i <= lastRow) {
  if (source_sheet.getRange("N"+i).getValue() == 'Wysłane' ) {
    var A = source_sheet.getRange("A"+i).getValue();
    var B = source_sheet.getRange("B"+i).getValue();
    var C = source_sheet.getRange("C"+i).getValue();
    var D = source_sheet.getRange("D"+i).getValue();
    var E = source_sheet.getRange("E"+i).getValue();
    var F = source_sheet.getRange("F"+i).getValue();
    var G = source_sheet.getRange("G"+i).getValue();
    var H = source_sheet.getRange("H"+i).getValue();
    var I = source_sheet.getRange("I"+i).getValue();
    var J = source_sheet.getRange("J"+i).getValue();
    var K = source_sheet.getRange("K"+i).getValue();
    var L = source_sheet.getRange("L"+i).getValue();
    var M = source_sheet.getRange("M"+i).getValue();
    var N = 'Archiwum';
       
    var data = [A,B,C,D,E,F,G,H,I,J,K,L,M,N];
    target_sheet.appendRow(data);
    i++;
    } else {
      i++;
      }
    }
 
    for (var i = lastRow; i>=2; i--) {
    if (source_sheet.getRange("N"+i).getValue() == 'Wysłane' ) {
    source_sheet.deleteRow(i);
    }
    }
    }
ID posta: 396297 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe