• ベストアンサー

Range("****")の****部分を変数にできますか?

エクセルでVBAを勉強中の初心者です。 今、配列data(row,col)に番地B17が読み込んであるとします。このセルB17にD5のセルに入っている値を入力したいのですが、次の記述ではエラーがでました。この場合どのようにすれば良いのでしょうか。どなたかご指導いただけないでしょうか。 Range(data(row,col).value)=range("D5").value

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

下記を参考にしてください。A1:A10に1-10を入れて 実行し1-10の値を答えてください。 Sub test01() n = InputBox("行=") s = "A" & n MsgBox Range(s) Range(s) = "a" End Sub しかし私などはCells()を使います。 Sub test02() n = InputBox("行=") MsgBox Cells(n, "A") Cells(n, "A") = "a" End Sub 他に Sub test03() m = 1: n = 3 s = "A" & m & ":" & "C" & n Range(s) = "3" End Sub でA1:C3の全セルが3になります。 Sub test04() m = 1: n = 3 Range(Cells(m, "A"), Cells(n, "C")) = "3" End Sub としても出来ます。

tomosato
質問者

お礼

早速、詳細なご指導をいただき感謝します。本当に参考になりました。とりいそぎお礼まで

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

その他の回答 (2)

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.3

.valueを省いてみたらどうですか?

tomosato
質問者

お礼

早速のご指導ありがとうございました。 valueを省いてみたのですが、やはりエラーになりました。 何か別の要因があるのかもしれません。 また、何かお気づきの点があれば、ご指導お願いします。 ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

配列 data(row,col)に番地って、どんな事をしているのでしょう? 配列 data(row,col) が 「B17」 なら Range(data(row,col)).value = range("D5").value で良いと思います。 何故わざわざ二次配列にセルのアドレスを格納するのかが不明ですけど。。。 Sub test() Dim data, myRow As Long, myCol As Integer  myRow = 0: myCol = 0  ReDim data(myRow, myCol)  data(myRow, myCol) = Range("B17").Address  Range(data(myRow, myCol)).Value = Range("D5").Value End Sub

tomosato
質問者

お礼

早速のアドバイスありがとうございました。二次元配列をつかっているのは、特定の番地に特定の値を入力する必要があるために、まず番地を読み込み、row+1の値をこの番地に入れようとしたためです。初心者故にトンチンカンなことをやっているのかもしれません。 でも、このように丁寧にご指導頂き本当に感謝します。

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

関連するQ&A

  • range cells 名称があれば教えてください

    MsgBox range("a1").Value MsgBox Cells(1, 1).Value どちらもセルA1の値を取得できるコードですが それぞれ何方式っていう名称があれば教えてもらえますか? 上はRange方式、で下は、Cells方式でしょうか? (エクセルvbaです)

  • VBA WorksheetFunction.VLookupとoffsetプロパティー

    エクセル2002使用です。 VBAの記述で、WorksheetFunction.VLookupを使って求めた値の入っているセルの列方向に一つ下の値を取得したいのですが・・・・ range("A1").Value =WorksheetFunction.VLookup( range("B1").Value, Range("A3:C10"), 3, 1) 例えば上記で得た値がC4セルにあるのであれば、C5セルの値を取得したいのです。 offset(0,1)プロパティーをどこにおけば良いのか良くわかりません。 どうかよろしくお願いします。

  • Rangeなどを変数でエラー

    Excel VBAについて。 以下のコードで「オブジェクトは、このプロパティまたはメソッドをサポートしていません」 エラーが発生します。原因は何でしょうか? Sub A() Dim stest Set stest = Worksheets("TEST") Dim ra Set ra = Range("C2") stest.ra.Value = Sheets("Sheet1").Cells(i, 2).Value ★ End Sub ★をSheets("TEST"). Range("C2").Value =略 のように、変数を使わずに記述するとエラーになりません。

  • Range

    xlsheet.Range(xlsheet.Cells(3, 1), xlsheet.Cells(lngMaxRows + 2, intvasRate_Col_KeiyakuName - 1)).Value = varExcelData 上記のプログラムで「Range」が記述されているのですが、どう意味でしょうか?。このステップだけ解析できません。お助け下さい。 どうぞよろしくお願い致します。

  • Excel VBA セル値の配列代入について

    Excel VBAで、セルの値を配列に代入する処理を、よくやります。 arr=Range("$A1:$C1000").value とかですね。これに関して、オートフィルタで絞り込んだ結果の可視セルだけを、配列に代入するということは、やっぱり出来ないのでしょうか。

  • VBAのCopyコマンドについて

    エクセルVBAでシート3のRangeの値をからシート2のRangeへデータをコピーしようとしているのですが Sheets(3).Range("B3:B100").Copy _ Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1)) がうまくいって、 Sheets(3).Range(Cells(2, col1), Cells(100, col1)).Copy _ sheets(2).Range(Cells(2, col2), Cells(100, col2)) が何故、オブジェクト定義エラーになってしまうのがわかりません。 col1、col2は列の変数です。 よろしくお願いします。

  • Excel-VBA rangeプロパティの使い方について

    Excel-VBA rangeプロパティの使い方について VBA初心者です。いろいろ調べたのですが、分からないので教えてください。 ThisWorkbookのSheet1のA1セルに、aというファイルのaというシートの特定のセルの値をコピーしたいです。 コピーする値のセルは、ThisWorkbookで入力した値を基に変数で記述したいです。 例えば、ThisWorkbookのSheet1のC2セルに「D1」と記載していたとして、その値を変数として設定して、最終的にaというファイルのaというシートの「D1」セルをThisWorkbookのA1セルに貼り付けるのが目的です。 この場合の、下記のhensuu = の設定方法について、ご教授願います。 hensuu = ThisWorkbook.Sheets("Sheet1").Range(“A1”)= Workbooks(a).Sheets(a).Range(hensuu)

  • 【Excel VBA】Rangeに変数を入れたい

    Excel2007を使っています。VBAは全くの初心者です。 VBAでやりたい事ですが、 ------------------------------------------------------------------------- 1つのブックにシートが2つあり、  ●シート「Data」にはE3,F3,G3・・・と横に4月,5月・・(翌)3月まで1年分の月が入っています。   それぞれの月の下の列に会社ごとの売上が入っています。  ●シート「トレンド」にも、C3,E3,F3・・・と横に4月,5月・・(翌)3月まで1年分の月が入っています。   同様にそれぞれの月の下の列に会社ごとの売上を入れるセル(ブランク)があります。 ユーザはコンボボックスで4月~(翌)3月の中から1つを選び、選んだ月が例えば7月ならば、 4月から7月までの売上データをシート「Data」から「トレンド」にもってきたいと思います。 「Data」には8月以降の値も予め入っていますが、これは「トレンド」にはもって こないようにしたいです。(「トレンド」は8月以降はブランクのまま) ------------------------------------------------------------------------- シート「Data」から「トレンド」に値を代入するに当たり、 Worksheet("トレンド").Range("C3: <コンボボックスで選ばれた月に該当する売上のセル>) = Worksheet("Data").Range("E3: <コンボボックスで選ばれた月に該当する売上のセル>) というRangeを使った処理を考えたのですが、このRange()内をどうすればよいかが 分かりません。( <>内の部分です・・) 該当する売上は、コンボボックスで選ばれた値をFindを使って、それぞれのシートの 月の列から検索し、ヒットしたセル(月)からOffsetを使って売上のセルを求めましたが、 この値をどうやって上のRange内に入れてよいか分かりません。 別の方法として、Range(Cells(r1, c1), Cells(r2, c2))に代入しようかと思いましたが、 r2, c2を、上記のOffsetで求めたセルからどのように使えばよいかわかりません。 Rangeにこだわっているわけではなく、上記の処理が行えればどんな方法でも 大丈夫です。(Findを使ったのでなんとなくRangeを使うのかなと思っただけです。) よい方法がお分かりになる方は、恐れ入りますが、初心者でも分かるように 教えていただけないですか? 説明不足があれば申し訳ございません。 どうぞよろしくお願い致します。

  • range表記をcells表記にしたい

    B列の最終行までループさせたいのですが Sub Sample() Dim col As Long col = 2 For Each R In Range("B1:B" & Cells(Rows.count, "B").End(xlUp).Row) Next End Sub この状態から、Bを使わずに、 col = 2を使って、書き換えてもらっても良いですか? For Each R In Range(Cells(1, col), Cells((Rows.count, col)).End(xlUp).Row) これにするとエラーになります。

  • 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