• 締切済み

Excel2010 VBA 配列変数

Dim 値(9,9,2) as Variant 値(2,5,1)="A" 値(2,5,2)="a" 選択数字が「1」だったら、Cells(2,5)に"A"が、選択数字が「2」だったら、Cells(2,5)に"a"が入力される処理を、If~Thenで考えたのですが、値の( )内の2、5、1、2の取得方法がわかりません。取得方法または他の方法がありましたら教えてください。

みんなの回答

  • TAKA_R
  • ベストアンサー率32% (26/79)
回答No.2

昔のエクセルを使っているので、違いがあるかは分かりませんが。 多次元配列になるのかな??2次元でいけそうだけど・・・。 (選択数字は正しく入れ直して使ってください) Dim 値 Select Case 選択数字 Case "1" 値=array(2,5,"A") Case "2" 値=array(2,5,"a") End Select cells(値(0),値(1))=値(2)

kana14
質問者

お礼

回答いただきましてありがとうございます。 「2」と「5」は多元なので、指定ではなく取得(変数に代入等)したいのですが。

全文を見る
すると、全ての回答が全文表示されます。
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

考えかただけですが、 1か2を入力すると対応するAかaが表示されるようにしています。 Dim 値(9, 9, 2) As Variant Dim r As Long Dim c As Long Dim ret As Long  r = 2  c = 5   値(2, 5, 1) = "A"   値(2, 5, 2) = "a"  ret = InputBox("input 1 or 2 ") Cells(r, c) = 値(r, c, ret)

kana14
質問者

お礼

回答いただきましてありがとうございます。 「2」と「5」は指定でなく、取得したいのですが。

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

関連するQ&A

  • VBA教えて下さい

    for nextの使い方がわかりません 変数を使用し条件に当てはまる数値だけ 処理するといった内容です 考えたコード sub test() dim a as variant dim b as variant dim i as variant with workbooks("book1").activesheet set a =.range("A5") set b =.range("B5") end with with workbooks("book2").activesheet for i = 80 to 110 if a = cells(i,1) then b.value = cells(i,2) end if next i end sub このコードにてやりたい事は まず、book1の今開いてるシートを参照し A5セル、B5セルをセットし (例えばA5は2と入力している B5セルは10000と入力している) 次に、book2の今開いてるシートを参照し もし、1行目の80~110どれかのセルの数字が 変数aと同じ値ならば (A行80~110行のセルの数字2があれば 例えば85列) 変数bの数字を2行目の80~110に条件に当てはまるセルに移す (B行85列にB5セルの値10000を移す) ()の部分は例えで書いてます 読みにくかったら無視でお願いしますm(__)m 指定の仕方など間違ってると思うので コードを書いてくれると助かります 回答お願いしますm(__)m

  • VBAで配列のある部分だけをを配列に入れたい

    VBAを勉強をしております。 例えばA1からG20までをある配列に入れているとします。 その配列のある部分(例えばB1からC20)を、別の配列にいれるにはどうすれば良いのでしょうか。 以下の方法で試してみましたが、上手くいきません。 Dim A() As Variant Dim B() As Variant A = Range("A1:G20") B = Range(Cells(A(1,2),Cells(A(20,3)))

  • EXCEL VBAの配列でわかりません。

    こんなコードがあるのですが、最後の他のシート(作業中シート)に書き込もうとするとエラーになってしまいます。”Sheets("作業中").”を抜くと同じシートに結果は返ってくるのですが…。コードの内容は、ある範囲のある列から空白ではないセルを探し出してその行のデータを配列で汲み取り、他のシートに一括で洗い出すというものです。 Sub 作業中() Dim myRow As Long Dim Data As Variant Dim WC() As Variant Dim WCE() As Variant myRow = Range("H1").CurrentRegion.Rows.Count Data = Range("H1:M" & myRow).Value For i = 1 To myRow If Data(i, 5) <> "" Then a = a + 1 Else b = b + 1 End If Next ReDim WC(a) ReDim WCE(b) c = 0 d = 0 For i = 1 To myRow If Data(i, 5) <> "" Then WC(c) = Range("H" & i & ":K" & i).Value c = c + 1 Else WCE(d) = Range(Cells(i, 8), Cells(i, 11)).Value d = d + 1 End If Next For i = 0 To a Range(Cells(i + 1, 15), Cells(i + 1, 18)).Value = WC(i) Next For i = 0 To b Range(Cells(i + 1, 19), Cells(i + 1, 22)).Value = WCE(i) Next e = Range(Cells(1, 15), Cells(a, 18)).Value Sheets("作業中").Range(Cells(1, 1), Cells(a, 4)).Value = e End Sub ちなみに同じシートから↓のコードを実行するとうまくいきます。 なぜ~??わからな~い??おしえてくださーい!! Sub test() Dim a As Variant a = Range("H1:K4") Sheets("作業中").Range("N1:Q4") = a End Sub

  • エクセルマクロ配列で変数は使えますか

    エクセル2013です。 初めて配列を使います。 以下のように作成し思ったようにできました。 Sub 計算() '成功 Dim a As Integer Dim c As Integer Dim b(5) As Integer Dim 最終行 Dim 値列  値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To 5 b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub ただ計算する列の範囲をインプットボックスで入力した値 にしたい為以下のように改造しました。 Dim b(対象列) As Integerでエラーになります 配列には変数は使用できないのでしょうか? よろしくお願いします。 Sub 計算() '失敗 Dim a As Integer Dim c As Integer Dim b(対象列) As Integer’★ここでERRになる Dim 最終行 Dim 対象列 Dim 値列  対象列 = 22'インプットボックスで入力した値 値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To (対象列 - 17) b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub

  • VBA Excel2003 謎のエラー

    いろいろ検索してみたのですが、問題が解決できません。 エクセルのSheet1のA1からG16のセルの内容を一つずつ感知し、マイナスだったら赤、プラスだったら緑、それ以外だったら何もしないという処理にしたいです。 Private Sub Workbook_Open() ThisWorkbook.Sheets("Sheet1").Select ThisWorkbook.Sheets("Sheet1").Range("A1").Select Dim 英語 As Integer Dim 数字 As Integer Dim sheet1 As Worksheets sh1 = Worksheets("Sheet1") sh1.Activate 英語 = 1 数字 = 1 For 数字 = 1 To 16 For 英語 = 1 To 6 '選択位置が、マイナスだったら赤、プラスだったら緑、それ以外は無視 If Range(sh1.Cells(英語 & 数字)) < 0 Then Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 7 ElseIf Range(sh1.Cells(英語 & 数字)) > 0 Then Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 4 Else Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 0 End If 英語 = 英語 + 1 Next 英語 数字 = 数字 + 1 Next 数字 End Sub

  • vba 初心者

    Dim a As Integer Dim inbox As String Dim Localpath As Variant Dim c As Range, myFadd As String Dim flag As Variant Dim MyShell As Object Dim Mysh As String Dim newHour As Variant Dim newMinute As Variant Dim newSecond As Variant Dim waitTime As Variant Localpath = ThisWorkbook.Path a = 1 inbox = InputBox("番号") Do If inbox = Empty Then Exit Sub End If If inbox = Cells(a, 1) Then MsgBox ("あります") Exit Do Else a = a + 1 ElseIf Cells(a, 1) <> inbox Then MsgBox ("ない") End If Loop Set MyShell = CreateObject("WScript.Shell") MyShell.Run ("AcroRd32.exe /n") MyShell.Run ("AcroRd32.exe /p") & Localpath & "\" & Myfile & ".pdf" newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + 10 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime Application.SendKeys "{Enter}", True '次の使用例は、10 秒を過ぎるとメッセージを表示します。 If Application.Wait(Now + TimeValue("0:00:10")) Then MsgBox "時間が過ぎました。" End If End Sub ExcelからPDFファイルを検索して印刷したいのですが、 見よう見まねで作ってみたもののエラーが出てしまってよく分かりません。 指摘できるところご指導よろしくお願いします。

  • 【Excel VBA 2010】空白セルの検索

    ある範囲の中から書式設定も文字も入っていないセルを選んできて、 それらには何も入力がされていないという警告を出そうと考えています。 Dim k As Integer Dim msg As String Dim 空欄() As Variant k = 0 msg = " " For i = 1 To 10 For j = 1 To 10 If Cells(i , j) = Cells(i , j).SpecialCells(xlCellTypeBlanks) Then ReDim Preserve 空欄(k) As Variant 空欄(k) = Cells(i , j).Address k = k + 1 End If Next Next If 空欄(k) <> " " Then For i = 0 To k - 1 msg = 空欄(i) & vbCrLf Next MsgBox (msg & "が入力されていません。") Else ・ ・ ・ と続くのですが、上記のコードでエラー(型が一致しない)が起きます。 素人のため原因がわからないので、どなたか修正をお願いいたします。

  • Excel2003 VBA 文字を打ち込んだだけで色が変わる方法

    突然失礼いたします。 前回、ファイルを開いたときに、青文字は無視、マイナスのときは赤に塗りつぶし、プラスのときは緑に塗りつぶし、それ以外は無視というプログラムを作りました。 今回は、それを文字を打っただけで実行できるようにしたいのですが、良い案はありますでしょうか。 ボタンを押すと・・・って処理でも良いんですが、それだと部長が忘れる可能性が高いんで・・・(^^;) 前回のプログラム: Private Sub Workbook_Open() Dim 英語 As Integer Dim 数字 As Integer Dim sh1 As Worksheet 英語 = 1 数字 = 1 For 数字 = 1 To 17 For 英語 = 1 To 7 '選択セル内が、文字色が青だったら無視、数字がマイナスだったら赤、数字がプラスだったら緑、それ以外は無視 If Cells(英語, 数字).Font.ColorIndex = 5 Then Cells(英語, 数字).Interior.ColorIndex = 0 ElseIf Cells(英語, 数字) < 0 Then Cells(英語, 数字).Interior.ColorIndex = 7 ElseIf Cells(英語, 数字) > 0 Then Cells(英語, 数字).Interior.ColorIndex = 4 Else Cells(英語, 数字).Interior.ColorIndex = 0 End If Next 英語 Next 数字 End Sub

  • VBA 結合されているセルのオートフィル

    先程同じような質問をしてしまい すいませんが 結合されているセルのオートフィルのやり方が今一つわかりません でしたので質問させていただきます。 やりたいこと A列・・・A1セル『1』A2セル『2』・・・A10セル『10』と 数字が入っています。 BとC列・・・結合されており B1C1セル『1000』B2C2セル『1100』と数字が入っています。 F1セル・・・1~10までの数字が入っています。 処理内容 F1セルに『5』と数字が入っている場合 B5C5セルを選択後、数字が入っているB2C2セルまで移動します。 そのあと、B5C5セルではなく B4C4セルまで『1100』とオートフィルしたいのですが 可能でしょうか。 それともこのような処理をしたい場合オートフィルをするのは 間違っているのでしょうか? すいませんがコード記載していますので 回答宜しくお願い致します。 コード Sub Macro1() Dim a As Variant Dim i As Variant Dim RSta As Long Set a = Range("F1") '検索値'例えば5と入力したら For i = 1 To 10 If a.Value = Cells(i, 1).Value Then 'F1セルに5と入力されA5セルの数字が5なら If Cells(i, 2) = "" Then 'B5セルの値が何もなければ RSta = Cells(i, 2).End(xlUp).Row 'ここでBとCセルの結合されているセルの数字が入っている 一番上のセルを選択し Range("B" & RSta, "C" & RSta).AutoFill Destination:=Range("B" & RSta, "C"), Type:=xlFillCopy 'このコードが間違っているらしくうまくできません。ここでBとCの結合されているセル2行目から4行目までをオートフィル(数字のコピーのみを実施したい) End If End If Next i End Sub

  • vba初心者

    いつもお世話様です。 A列にあらかじめデータを入れといてinboxでデータを検索してもしあったらPDFファイルを開いて印刷でもしデータがなかったらinboxに戻るかたちにしたいんですけど、do...loopの使い方が分からないのと、デバックがでてしまってどう直せばいいかわかりません。サンプルコードがあれば助かります。よろしくお願いします。 Dim a As Integer Dim inbox As String Dim Localpath As Variant Dim c As Range, myFadd As String Dim flag As Variant Dim MyShell As Object Dim Mysh As String Dim newHour As Variant Dim newMinute As Variant Dim newSecond As Variant Dim waitTime As Variant Localpath = ThisWorkbook.Path a = 1 inbox = InputBox("番号") Do If inbox = Empty Then Exit Sub End If If inbox = Cells(a, 1) Then MsgBox ("あります") Exit Do Else a = a + 1 ←ここでデバックがでてしまいます。 ElseIf Cells(a, 1) <> inbox Then MsgBox ("ない") End If Loop Set MyShell = CreateObject("WScript.Shell") MyShell.Run ("AcroRd32.exe /n") MyShell.Run ("AcroRd32.exe /p") & Localpath & "\" & Myfile & ".pdf" newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + 10 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime Application.SendKeys "{Enter}", True '次の使用例は、10 秒を過ぎるとメッセージを表示します。 If Application.Wait(Now + TimeValue("0:00:10")) Then MsgBox "時間が過ぎました。" End If End Sub

専門家に質問してみよう