0

こんにちは、私は正常に動作する通常のExcelシートにvbaコードがあります。私は仕事をgoogleシートで行うために何かをしたい。あなたのシートにドロップダウンを使用したときに検証リストの変更元(Googleシート)を変更すると、自動的に検証エントリが変更されます

だから、基本的には、このマクロは即座にあなたが同じ結果を持って式に行った選択を変更します。

は、私はこのコードが何をするのか説明しましょう。

元のリストの選択肢の値を変更すると、同じ値の「位置」に現在解決されているすべてのセルがすべての式なので自動的に更新されます。

Googleスプレッドシートで誰もが同じように手助けできますか?

これは、VBAコードは、あなたたちは

https://drive.google.com/file/d/0B8OCuWHp5L8TWDFyR0xDV1d0bTA/view?usp=sharing

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim strValidationList As String 
Dim strVal As String 
Dim lngNum As Long 

On Error GoTo Nevermind 
strValidationList = Mid(Target.Validation.Formula1, 2) 
strVal = Target.Value 
lngNum = Application.WorksheetFunction.Match(strVal, Range(strValidationList), 0) 

If strVal <> "" And lngNum > 0 Then 
    Application.EnableEvents = False 
    Target.Formula = "=INDEX(" & strValidationList & ", " & lngNum & ")" 
End If 

Nevermind: 
    Application.EnableEvents = True 

End Sub 

答えて

0
を見てみたい場合は

http://g.recordit.co/DfFslr0iJF.gif

これはサンプルファイルでどのように動作するかを示して簡単なGIFです

onEdit()トリガを使用できます。以下のコードは、関数に渡されたイベントオブジェクトを調べることによって編集のコンテキストを取得し、ターゲット範囲(この場合は 'A1')の検証ルールを動的に再構築します。あなたの例のように、リストの値は列2にあります:

function onEdit(e){ 

    var sheet = e.source.getActiveSheet(); 
    var range = e.range; 
    var listValuesCol = 2; 

    if(range.getColumn() == listValuesCol && sheet.getName() =='yourSheetName'){ // checking if the values were updated 

    var sourceRange = sheet.getRange(1, listValuesCol, sheet.getLastRow(), 1); //range containing validation rule list values 
    var targetRange = sheet.getRange(1,1); //target cell, e.g. A1 

    var newValidationRule = SpreadsheetApp.newDataValidation() 
    .requireValueInRange(sourceRange, true) //boolean flag for showing or disabling dropdown list 
    .build(); 

    targetRange.setDataValidation(newValidationRule); 

    SpreadsheetApp.flush(); 


    } 


} 
+0

アンオンのおかげでありがとう。あなたが説明したように、それは私が欲しかったやり方ではうまくいくと思われるが、まだまだ私は3行目の "TypeError:Undefinedから"プロパティ "source"を読み込めません。 どうすれば解決できますか? また、シート内に多数のドロップダウンを追加する予定です。そこで、このスクリプトを自分のシート内のすべてのドロップダウンに適用する簡単な方法があります。 乾杯、 –

+0

StackOverflowは、あなたの特定の状況に合わせて特別なソリューションを得るための適切な場所ではありません。おそらく、まずGoogle Apps Scriptのドキュメントに精通しているはずです。https://developers.google.com/apps-script/関数の引数( 'e')は、スプレッドシート自体から生成されたイベントオブジェクトです。実際にスプレッドシートに値を入力しないかぎり、それが動作するとは思わないでください。 onEdit()は基本的にイベントハンドラなので、関数を手動で実行すると、もちろん 'e'は '未定義'になります –

+0

Antonさん、トリガの使い方を掘り下げていますが、コードは私が期待したとおりに動作していません。私はこのリンクのためにこのシートを編集する許可を与えました。 https://docs.google.com/spreadsheets/d/1ztE_yVkM-bIzQ8y5xuBw9zUxme7Q90FjTPur3fpqbJM/edit?usp=sharingあなたが私を助けることができるなら、私はそれを評価するでしょう。ありがとうございました... –

関連する問題