• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:変数の値をセルから取得したい)

変数の値をセルから取得する方法

このQ&Aのポイント
  • 変数の値をセルから取得するには、VBAのCells関数を使用します。
  • 具体的な方法は、cells(10, 5)で指定したセルの値を変数に代入することになります。
  • ただし、指定したセルの内容が変数ではなく、g_array(1, 1)という文字列になってしまう場合は、セルの値を直接変数に代入するのではなく、セルの値をg_array(1, 1)に代入するようにVBAコードを修正する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.1

セル(10,5)に入っているのは「g_array(1,1)」という「文字列」ですから、ご質問のように文字列としての「g_array(1,1)」が返ってきてしまう訳です。 配列名g_arrayが固定(他の配列も定義して、セルに入れる配列名が変化する。という状況はない)だとして、強引ですが以下のようにすればとりあえずは目的の値が返ります。 動作の概要としては、文字列としての「g_array(1,1)」から数値としての添字「1と1」を取り出してきて、g_arrayの添字として使って、目的の値を得ています。 -------------- Sub sample() Dim g_array(3, 3) As Variant Dim idx As Variant   '配列の添字用 g_array(1, 1) = "5" Dim test As Variant idx = getindex(Cells(10, 5).Value) test = g_array(idx(0), idx(1)) End Sub Private Function getindex(str As String) Dim retdata(1) '戻り値を配列で Dim i As Long Dim strlen As Long Dim str0 As String Dim str1 As String strlen = Len(str) str1 = "" For i = 1 To strlen str0 = Mid(str, i, 1) chk = check(str0) Select Case chk Case 0 '数値の場合 str1 = str1 + str0 Case 1 '「,」の場合 retdata(0) = str1 str1 = "" Case 2 '「)」の場合 retdata(1) = str1 End Select Next i getindex = retdata End Function Private Function check(str As String) As Long check = 9 If str = "," Then check = 1 End If If str = ")" Then check = 2 End If If InStr("0123456789", str) <> 0 Then check = 0 End If End Function ------------------ 全然スマートではないです。もっといい方法があると思います。 ご参考までに。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 取得した変数の値の一番大きい変数を取る

    エクセル2002使用です。 セル(A~F列)にランダムに入力された列の最終行数を変数で取っています。 その中で最も大きい変数の値を取るコードを記述したいのですが、 良い方法がわかりません。 sub test() Dim rcnt1, rcnt2, rcnt3, rcnt4, rcnt5, rcnt6, rcnt As Integer '最終行の取得 rcnt1 = Cells(65536, 1).End(xlUp).Row rcnt2 = Cells(65536, 2).End(xlUp).Row rcnt3 = Cells(65536, 3).End(xlUp).Row rcnt4 = Cells(65536, 4).End(xlUp).Row rcnt5 = Cells(65536, 5).End(xlUp).Row rcnt6 = Cells(65536, 6).End(xlUp).Row rcnt = "最も大きい変数の値" ←ここがわかりません。 end sub よろしくお願いします。

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub

  • セルの値が欲しい

    セルに入力されている値を取得する方法といいますか理解が今だ出来ません エクセルの上記に入っている値*画像添付とセルに入力されている値が違う場合 セルに入力している値を取得したいのです、説明がわかりにくいかもしれませんので、情報が足らない際はおしゃってください、よろしくお願いします。 下記のコードでは画像に入っている値を取り出します。 Sub test() Dim ret As Range Dim piyo As Variant Application.ScreenUpdating = False Set ret = Range("M:M").Find(Application.Max(Range("M:M"))) piyo = ret.Offset(0, -1).Value MsgBox piyo END Sub

  • セルが何行なのかをVBAで取得したい

    セルが何行なのかをVBAで取得したいのですが どういうコードにすればいいですか? 例えば、A1セルに a b c と入ってる場合、3行ですが それをVBAで取得するにはどうすればいいですか? Sub test() Dim r As Range Set r = Cells(1, 1) If r.Value Like "*" & Chr(10) & "*" Then MsgBox "改行があります" End If End Sub というコードで改行が有ることは取得できたのですが 何行かまでは取得する方法がわかりません。

  • VBA セルの値を取得する

    下記のはランダムにチーム分けするものです。 TmCnt = 5がチーム数です。 Sub Sample() Dim Total As Integer Dim TmCnt As Integer Dim Data1 As Variant Dim Data2() As String Dim i As Integer, j As Integer, k As Integer Total = Cells(Rows.Count, 1).End(xlUp).Row TmCnt = 5 Data1 = Range("A1:A" & Total).Value ReDim Data2(1 To Total) Randomize For i = TmCnt To 1 Step -1 j = Int(Rnd * i) + 1 Data2(i) = Data1(j, 1) Data1(j, 1) = Data1(i, 1) Next i For i = Total To TmCnt + 1 Step -1 j = Int((i - (TmCnt + 1) + 1) * Rnd + TmCnt + 1) Data2(i) = Data1(j, 1) Data1(j, 1) = Data1(i, 1) Next i i = 1 Do For j = 1 To TmCnt k = k + 1 Cells(i, j + 2).Value = Data2(k) If k = Total Then Exit Sub Next j i = i + 1 Loop End Sub TmCnt = 5をセル「B1」にチーム数を入力し、(例「6」「4」など)マクロを実行したいのです。 検索しましたところ、 セルの値を取得するにはRange("A1").Valueを入力だそうです。 TmCnt = 5を下記に書き換えるにはどのようにしたら良いでしょうか? Dim s As String s = Range(“B1”).Value Debug.Print(s) 宜しくお願いします。

  • VBA プロシージャで値を渡す方法

    エクセルVBAのプロシージャで値を渡す方法はどうしたらいいのでしょうか。 たとえば、下記のようなプログラムを書いたとします。 --------------------------------------------- Private Sub test_main() Dim drink As String Dim alcohol As String Call test(cola, beer) End Sub Public Sub test_module(ByVal drink As String, ByVal alcohol As String) Cells(1, 1).Value = drink Cells(2, 2).Value = alcohol End Sub --------------------------------------------- このプログラムはもちろん不完全です。試してみたら動きませんでした。 やりたいことは、メインのプロシージャ(test_main)から、test_moduleを 呼び出し、同時に「cola」と「beer」の値を渡します。呼び出された先で、 エクセルのワークシートのセルに値を入力します。 重複しますが、それぞれの値「cola」と「beer」は変数「drink」と「alcohol」に代入されます。 この変数をcell(1,1)とcell(2,2)に入力します。 ワークシート上のcell(1,1)には「cola」、cell(2,2)には「beer」 と入力されます。 変数は数値ではなく、文字列です。 ポイントは、変数「drink」と「alcohol」をどのプロシージャに宣言するのか また、変数に値「cola」と「beer」をのどプロシージャでどういうふうに代入するのか。 そして代入した変数をどうやって呼び出したいプロシージャに渡すのかです。 このようなことをするには、上記プログラムをどう書き換えたらよいのでしょうか。

  • vbaにおいて、セルのエラー検出に関して

    vbaにてセルに入力する数式のエラー検出に関して教えてください。 iserror関数で検出できない数式を簡単に検出する方法ありませんか? sub test() dim str as string str=" C2*C3* " cells(5,7).value=str end sub 簡単なVBAのコードですが、*の右側はセル相対参照もセル絶対参照も数値も入っていませんので、数式としてはエラーです。 strの値を(5,7)のセルに放り込んだら、vbaのエラーで停止してしまいます。 かといって、iserror()を使って、 sub test() dim str as string str="C2*C3*" if iserror(str)=true then else cells(5,7).value=str end if end sub としても、エラーをはじいてくれず、VBAでもエラーを出力してしまいます。 力業で、strの数式エラーをはじくしか方法はないのでしょうか? インターネットを調べているのですが、的を射た答えが出てきません。 どなたか詳しい方ご教示ください。

  • セルの値を転記

    下記のコードで sub main() Dim i As Long Dim rowToWrite As Long Dim 最終行 As Long Dim result As Variant Dim tmp As Variant Dim j As Long 最終行 = Range("B1").End(xlDown).Row result = Cells(1, 1).Resize(最終行, 2).Value For rowToWrite = 1 To 最終行 If tmp <> result(rowToWrite, 2) Then i = i + 1 j = 1 result(rowToWrite, 1) = i & "-" & j tmp = result(rowToWrite, 2) Else j = j + 1 result(rowToWrite, 1) = i & "-" & j End If Next rowToWrite Cells(1, 1).Resize(最終行, 2).Value = result End Sub Bセルの値が aaaaa aaaaa aaaaa bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb ccccc ccccc だった場合 ↓ Aセル,Bセル 1-1,aaaaa 1-2,aaaaa 1-3,aaaaa 2-1,bbbbb 2-2,bbbbb 2-3,bbbbb 2-4,bbbbb 2-5,bbbbb 2-6,bbbbb 3-1,ccccc 3-2,ccccc とBセルの値が 変わったタイミングで Aセルに管理番号が増えていくのですが Cells(1, 1).Resize(lastRow, 2).Value = resultの値を 表示せずに 2次元配列として resultの値を result = 結果(debug.print 結果) としてAセルの値を 1-1 1-2 1-3 2-1 2-2 2-3 2-4 2-5 2-6 3-1 3-2 と転記したいのですがアドバイスいただけたら助かります。 よろしくお願いいたします。

  • エクセル2007 参照セルの値が認識されない

    エクセル2007の環境で下記マクロを実行すると、 アクティブシートのセルA1に数字が入っている場合、Sheet1のセルA1に値を転記しても そのセルA1の値をVLOOKUP関数で参照できません。 マクロに問題があるためなのか何処に問題があるのか分からないので教えてください。 宜しくお願いいたします。 【sheet】は アクティブシートの3行目から1000行目までのA列のセルをクリックしたらセルA1に値を表示 その後、下記【モジュール】を使用し、 アクティブシートのセルA1が空白の場合、 A列の数値をSheet1のセルA1に転記し、アクティブシートのA列の数値が空白になるまで循環する。 Sheet1のセルA1の値をVLOOKUP関数で参照した内容を表示、印刷します。 ----------------------------------------------------------------- '【sheet】 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Count > 1 + IsEmpty(.Value) Then Exit Sub If Application.Intersect(.Cells, Range("A3:A1000")) Is Nothing Then Exit Sub ActiveSheet.Cells(1, 1).Value = .Value End With End Sub ----------------------------------------------------------------- '【モジュール】 Sub TEST() Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim WS1 As Worksheet, WS2 As Worksheet Dim i As Long myMsg = "●●●" myTitle = "確 認" myBtn = MsgBox(myMsg, vbYesNo + vbExclamation, myTitle) If myBtn = vbYes Then Set WS1 = ActiveSheet Set WS2 = Sheet1 If WS1.Cells(1, 1).Value = "" Then With WS1 For i = 3 To 65536 If .Cells(i, 1).Value = "" Then Exit For WS2.Cells(1, 1).Value = .Cells(i, 1).Value WS2.Cells(1, 2).Value = ActiveSheet.Name 'WS2.PrintOut Copies:=1 Next i End With ElseIf WS1.Cells(1, 1).Value >= 1 Then WS2.Cells(1, 1).Value = WS1.Cells(1, 1).Value WS2.Cells(1, 2).Value = WS1.Name 'WS2.PrintOut Copies:=1 Else End If End If End Sub -----------------------------------------------------------------

  • TextBoxの値を複数シートのセルに記入する

    よろしくお願いします。 TextBoxの値を複数シートのセルに記入するようにしたいのですが 一つのシートにしか記入されません。 醜い構文ですみません。 Private Sub CommandButton1_Click() Dim a As Long Dim b As Long Dim f As Long Dim h As Long Dim c As Range Dim d As Range Dim e As Range Dim g As Range With Worksheets(Array("駐車状態", "材料", "外壁1", "外壁2", "屋根1")).Select Set c = Cells(1, 2) For a = 1 To 140 Step 7 Set c = Union(c, Cells(a, 2)) c = TextBox1.Value Next c.EntireRow.Select Set d = Cells(1, 4) For b = 1 To 140 Step 7 Set d = Union(d, Cells(b, 4)) d = TextBox1.Value Next d.EntireRow.Select Set g = Cells(2, 2) For h = 2 To 141 Step 7 Set g = Union(g, Cells(h, 2)) g = TextBox2.Value Next g.EntireRow.Select Set e = Cells(2, 4) For f = 2 To 141 Step 7 Set e = Union(e, Cells(f, 4)) e = TextBox2.Value Next e.EntireRow.Select End With End Sub