Excel vba yı google script e çevirme

uurluyum

Altın Üye
Katılım
25 Haziran 2019
Mesajlar
124
Excel Vers. ve Dili
Excel Vers. ve Dili Ofis 2016 TR 32 Bit ve google e tablolar
Altın Üyelik Bitiş Tarihi
12-10-2024
merhaba,

Aşağıda yazılı olan kodu google e tablolar a göre nasıl ayarlayabilirim.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

Set KeyCells = Range("L4:L34")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then

Call siralama

End If
End Sub


Aslında istediğim şey belirli bir sütundaki tarihleri o sayfaya bir değer girdiğim anda otomatik olarak küçükten büyüğe doğru sıralatmak.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,323
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
L4:L... alanını tarih olarak biçimlendirdikten sonra;

Not: Sayfa adı eğer Sheet1 değilse, aşağıdaki script içerisinde değiştirirsiniz...

JavaScript:
function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("L4:L");
  var xCol = sheet.getActiveRange().getColumn();

  if ( xCol == 12 && sheet.getName() =='Sheet1' ) {
    range.sort({column: 12, ascending: true});
    }
}

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,971
Excel Vers. ve Dili
Office 2013 İngilizce
L4:L... alanını tarih olarak biçimlendirdikten sonra;

Not: Sayfa adı eğer Sheet1 değilse, aşağıdaki script içerisinde değiştirirsiniz...

JavaScript:
function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("L4:L");
  var xCol = sheet.getActiveRange().getColumn();

  if ( xCol == 12 && sheet.getName() =='Sheet1' ) {
    range.sort({column: 12, ascending: true});
    }
}

.
Haluk Hocam,
MS Excel' de sayfa1' deki veriyi sayfa2 ye aktarmak için aşağıdaki kodu kullanıyoruz
google e-tabloda bu işlemin aynısını yapmak için kodu nasıl düzenleyebiliriz?

ilgi ve desteğiniz için şimdiden teşekkürler,
iyi çalışmalar.

Kod:
Sub VeriAktar()
Dim WS1 As Worksheet
Dim WS2 As Worksheet
Dim LR As Long, x As Long

Set WS1 = Sheets("Sayfa1")
Set WS2 = Sheets("Sayfa2")

LR = WS2.Cells(WS2.Rows.Count, "A").End(xlUp).Row

x = LR + 1

WS2.Range("A" & x) = WS1.Range("A12")
WS2.Range("B" & x) = WS1.Range("B12")
WS2.Range("C" & x) = WS1.Range("C12")
WS2.Range("D" & x) = WS1.Range("D12")

End Sub
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,323
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
JavaScript:
function Test() {
  var sourceSheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('Sheet2');
  const arrData   = targetSheet.getRange('A:A').getValues();
 
  var lastA = arrData.map(x => x[0]).indexOf('') + 1;
  var myRng = targetSheet.getRange('A'+ lastA + ':D' + lastA);
 
  var data =[];
  data     = sourceSheet.getRange('A12:D12').getValues();
  myRng.setValues(data);
}
.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,971
Excel Vers. ve Dili
Office 2013 İngilizce
JavaScript:
function Test() {
  var sourceSheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('Sheet2');
  const arrData   = targetSheet.getRange('A:A').getValues();

  var lastA = arrData.map(x => x[0]).indexOf('') + 1;
  var myRng = targetSheet.getRange('A'+ lastA + ':D' + lastA);

  var data =[];
  data     = sourceSheet.getRange('A12:D12').getValues();
  myRng.setValues(data);
}
.
Haluk Hocam çok teşekkürler, iyi ki varsınız!

google script' te for ... next döngüsü Microsoft ile benzer midir?

Örnek: Sayfa1' de 2 . satırdan başlayarak 12. satıra kadar sayfa2' ye aktarma işlemini nasıl yapabiliriz?

Kod:
for i=2 to 12
   WS2.Range("A" & x+ i- 2) = WS1.Range("A"& i)
   WS2.Range("B" & x+ i- 2) = WS1.Range("B"& i)
   WS2.Range("C" & x+ i- 2) = WS1.Range("C" & i)
   WS2.Range("D" & x+ i- 2) = WS1.Range("D" & i)
Next i
iyi Akşamlar.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,323
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Sonuçta her programlama dilinde döngüler kullanılır, yapıları biraz farklı gibi de olsa mantık aynıdır.

Google Script'te döngüler için aşağıdaki linke bakabilirsiniz;

Loops in Apps Script (spreadsheet.dev)

Ama, sayfadan veri okurken veya yazarken döngü kullanılması script'in yavaş çalışmasına neden olur..... bu her programlama dilinde böyledir. Bu nedenle, bu işler için mümkün mertebe dizilerden faydalanmak gerekir.

Bahsettiğiniz durum için dizi kullanarak,benim önerim;

JavaScript:
function Test() {
  var sourceSheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('Sheet2');

  const arrData   = targetSheet.getRange('A:A').getValues();
 
  var lastA = arrData.map(x => x[0]).indexOf('') + 1;

  var myRng = targetSheet.getRange('A'+ lastA + ':D' + (lastA + 10));
 
  var data =[];
  data     = sourceSheet.getRange('A12:D22').getValues();

  myRng.setValues(data);
}

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,971
Excel Vers. ve Dili
Office 2013 İngilizce
Sonuçta her programlama dilinde döngüler kullanılır, yapıları biraz farklı gibi de olsa mantık aynıdır.

Google Script'te döngüler için aşağıdaki linke bakabilirsiniz;

Loops in Apps Script (spreadsheet.dev)

Ama, sayfadan veri okurken veya yazarken döngü kullanılması script'in yavaş çalışmasına neden olur..... bu her programlama dilinde böyledir. Bu nedenle, bu işler için mümkün mertebe dizilerden faydalanmak gerekir.

Bahsettiğiniz durum için dizi kullanarak,benim önerim;

JavaScript:
function Test() {
  var sourceSheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('Sheet2');

  const arrData   = targetSheet.getRange('A:A').getValues();

  var lastA = arrData.map(x => x[0]).indexOf('') + 1;

  var myRng = targetSheet.getRange('A'+ lastA + ':D' + (lastA + 10));

  var data =[];
  data     = sourceSheet.getRange('A12:D22').getValues();

  myRng.setValues(data);
}

.
Haluk Hocam Sayfa1' deki satır sayısını dinamik hale getirmek için F1 hücresine değeri yazdım
koduda aşağıdaki gibi düzenledim, yalnız;

Exception: Verilerdeki satır sayısı, aralıktaki satır sayısıyla eşleşmiyor.

şeklinde hata mesajı alıyorum, kodda hata nerededir?

Kod:
function Test() {
  var sourceSheet = SpreadsheetApp.getActive().getSheetByName('Sayfa1');
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('Sayfa2');
    var lastA=[]
     lastA = sourceSheet.getRange('F1').getValues();
 
  const arrData   = targetSheet.getRange('A:A').getValues();

  var lastB = arrData.map(x => x[0]).indexOf('') + 1;

  var myRng = targetSheet.getRange('A'+ lastB + ':D' + (lastB + lastA) );
  var data =[];
  data     = sourceSheet.getRange('A12:D' + (12 + lastA)).getValues();
  myRng.setValues(data);
}
her şey için tekrar teşekkürler,
 

Ekli dosyalar

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,323
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
C#:
function Test3() {
  var sourceSheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('Sheet2');

  var size        = sourceSheet.getRange('F1').getValue();

  const arrData   = targetSheet.getRange('A:A').getValues();
 
  var lastA = arrData.map(x => x[0]).indexOf('') + 1;

  var myRng = targetSheet.getRange('A'+ lastA + ':D' + (lastA + size));
 
  var data =[];
  data     = sourceSheet.getRange('A12:D' + (12 + size)).getValues();

  myRng.setValues(data);
}

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,971
Excel Vers. ve Dili
Office 2013 İngilizce
C#:
function Test3() {
  var sourceSheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('Sheet2');

  var size        = sourceSheet.getRange('F1').getValue();

  const arrData   = targetSheet.getRange('A:A').getValues();

  var lastA = arrData.map(x => x[0]).indexOf('') + 1;

  var myRng = targetSheet.getRange('A'+ lastA + ':D' + (lastA + size));

  var data =[];
  data     = sourceSheet.getRange('A12:D' + (12 + size)).getValues();

  myRng.setValues(data);
}

.
Haluk Hocam tekrar merhaba,
fazla olduğumunun farkındayım ama;
bir değeri ('123') çoklu hücre bloğunun tüm hücrelerine yazdırmak için nasıl bir düzenleme yazılabilir?

Kod:
   var myRng = targetSheet.getRange('A'+ 10 + ':D' + (10 + size));
   myRng.setValues('123');
ilgi ve alakanız için tekrar teşekkürler,
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,323
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
JavaScript:
myRng.setValue(123);
.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,971
Excel Vers. ve Dili
Office 2013 İngilizce
Haluk Hocam Sayfa1' deki satır sayısını dinamik hale getirmek için F1 hücresine değeri yazdım
koduda aşağıdaki gibi düzenledim, yalnız;

Exception: Verilerdeki satır sayısı, aralıktaki satır sayısıyla eşleşmiyor.

şeklinde hata mesajı alıyorum, kodda hata nerededir?

Kod:
function Test() {
  var sourceSheet = SpreadsheetApp.getActive().getSheetByName('Sayfa1');
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('Sayfa2');
    var lastA=[]
     lastA = sourceSheet.getRange('F1').getValues();

  const arrData   = targetSheet.getRange('A:A').getValues();

  var lastB = arrData.map(x => x[0]).indexOf('') + 1;

  var myRng = targetSheet.getRange('A'+ lastB + ':D' + (lastB + lastA) );
  var data =[];
  data     = sourceSheet.getRange('A12:D' + (12 + lastA)).getValues();
  myRng.setValues(data);
}
her şey için tekrar teşekkürler,
Haluk Hocam sağolun, varolun;
müsaadelerixle şöyle bir sorum daha olacak,
son satırı bulurken eğer arada boş hücreler varsa onları atlamıyor,

boşlukları pas geçip dolu olan en son hücreyi bulacak şekilde nasıl düzenlenebilir,

Kod:
var lastA = arrData.map(x => x[0]).indexOf('') + 1;
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,323
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
C#:
var lastA = targetSheet.getRange('A' + targetSheet.getMaxRows()).getNextDataCell(SpreadsheetApp.Direction.UP).getLastRow() + 1;

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,971
Excel Vers. ve Dili
Office 2013 İngilizce
C#:
var lastA = targetSheet.getRange('A' + targetSheet.getMaxRows()).getNextDataCell(SpreadsheetApp.Direction.UP).getLastRow() + 1;

.
Haluk Hocam teşekkürler,

Aşağıdaki kod da aynı işi yapmaz mı?
öğrenmek için soruyorum.

Kod:
var LastA = targetSheet.getLastRow()
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,323
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Tam olarak yapmaz....

Şöyle ki; eğer A sütununda en son dolu hücre örneğin A125 olsun. Eğer A sütunu hariç diğer sütunların herhangibirinde en son dolu hücre örneğin 145 ise sizin örneğinizdeki "LastA" değeri 145 olur. Eğer A sütunu haricindeki diğer sütunların hiçbirinde son dolu hücre 125. satırı geçmiyorsa ancak o zaman "LastA" değeri 125 olur.

Bu bilgiyle birlikte bugünkü OnLine eğitim ücreti bedeli toplam 750 TL oldu....

.
 
Üst