私は、そのアドレス変数として定義されている特定の行/列から始まるシートから(例えば4日に)データの列をn番目を引っ張る機能を記述しようとしています。Iは、n番目の位置に「アクティブ」セルを移動し、そのセルをアクティブセルが、マクロアボートを作るために)(オフセット使用しかし.getrange試みました。誰もがこれをやっていますか?データの性質上、私が「アクティブ」セルn列を移動することが重要です。以下のコードの一部:
function PullSelectedData() {
//
var GeneralDataFirstLocation = "D4"; //data starting point cell D4
var ColumnsBetweenSeries = 4; //want data from each of the 4 columns (e.g.; D4, H4, L4, P4....)
var ReturnedValue = 0;
//
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var BondCheckSS = spreadsheet.getSheetByName("BONDCHECKSHEET");
//
for (var i = 0; i <= 3; i++) {
BondCheckSS.getRange(GeneralDataFirstLocation).Offset(0, ColumnsBetweenSeries * i).activate();
ReturnValue = getActiveCell().getValue();
}
}
なぜそれがクラッシュしました
- 最初の問題は、つまり
Offset
それがあるべきよう、機能ではないoffset
機能のためのあなたの引数が正しいですので、その問題が解決されるものの、。 - 次の問題は、つまり
getActiveCell
それはシートに呼び出される必要があり、それ自身の機能ではありません。例えば、MySheet.getActiveCell()
- クラッシュにあなたのコードを引き起こしていますが、使用することができない第3の問題
ColumnsBetweenSeries
の変数を、あなたにループを変更していますfor (var i = 0; i < ColumnsBetweenSeries; i++) {
不要な行動
この時点で、あなたのコードは今罰金、それはもはやクラッシュを実行しますが、問題がまだある、それは非常にあなたがそれをやりたいしません。ここではそれが今のように見えるものです
function PullSelectedData() {
var GeneralDataFirstLocation = "D4"; //data starting point cell D4
var ColumnsBetweenSeries = 4; //want data from each of the 4 columns (D4, H4, L4, P4)
var ReturnedValue = 0;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var BondCheckSS = spreadsheet.getSheetByName("BONDCHECKSHEET");
for (var i = 0; i < ColumnsBetweenSeries; i++) {
BondCheckSS.getRange(GeneralDataFirstLocation).offset(0, ColumnsBetweenSeries * i).activate();
ReturnedValue = BondCheckSS.getActiveCell().getValue();
}
}
主な問題は、あるReturnedValue
ループのすべての反復を上書きされます。我々は、いずれかの合計にすべての反復を追加する必要があり、または私たちは、その後、さらに処理を行うことが可能なリストにすべてを置くことができるようにします。
我々は総に各セルの値を追加したい場合は、設定した行ReturnedValue
のループでは、次のようになります
ReturnedValue += BondCheckSS.getActiveCell().getValue();
我々は、すべてのリストに入れたい場合は、我々はアペンド機能を使用して、リストに各要素を追加することができ、MyList.append(valueToAppend)
その場合には、宣言はReturnedValue
次のようになります。
var ReturnedValue = [];
ループの内部、設定がReturnedValue
リストの最後に、各値を加算し、以下、となります
ReturnedValue.append(BondCheckSS.getActiveCell().getValue());
function PullSelectedData() {
var GeneralDataFirstLocation = "D4"; //data starting point cell D4
var ColumnsBetweenSeries = 4; //want data from each of the 4 columns (D4, H4, L4, P4)
var ReturnedValue = 0;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var BondCheckSS = spreadsheet.getSheetByName("BONDCHECKSHEET");
for (var i = 0; i < ColumnsBetweenSeries; i++) {
BondCheckSS.getRange(GeneralDataFirstLocation).offset(0, ColumnsBetweenSeries * i).activate();
ReturnedValue += BondCheckSS.getActiveCell().getValue(); // Notice the change from = to +=
}
}
リストの例
function PullSelectedData() {
var GeneralDataFirstLocation = "D4"; //data starting point cell D4
var ColumnsBetweenSeries = 4; //want data from each of the 4 columns (D4, H4, L4, P4)
var ReturnedValue = []; // Notice change from 0 to []
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var BondCheckSS = spreadsheet.getSheetByName("BONDCHECKSHEET");
for (var i = 0; i < ColumnsBetweenSeries; i++) {
BondCheckSS.getRange(GeneralDataFirstLocation).offset(0, ColumnsBetweenSeries * i).activate();
ReturnedValue.append( BondCheckSS.getActiveCell().getValue() ); // We now append each value to the list instead of overwriting it each time
}
} // ReturnedValue is now filled with the values of D4, H4, L4 and P4, Ex: [10, 20, 30, 40]