• ベストアンサー

エクセルVBA 変数の値を別の変数に格納するには?

Xという変数に格納した値を Y1,Y2,Y3という変数にいれて Y値を操作するという作業をすることが目的です。 最初は Y1 = X としてみましたがうまくいかず、苦し紛れに Worksheets(1).Cells(1, 1) = X Y1 = Worksheets(1).Cells(1, 1) Y2 = Worksheets(1).Cells(1, 1) Y3 = Worksheets(1).Cells(1, 1) X値をいったんセルにいれて そこからY値をとるという われながらなかなかセンスのない処理をしています。 だれか美しいコードを教えてください。

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

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

>Y1 = X としてみましたがうまくいかず VBAでは普通はうまくいくはずです。定義したデータ型が違ったりしてなければ。 Sub test01() x = 1 y1 = x y2 = x y3 = x MsgBox y1 MsgBox y2 MsgBox y3 End Sub y1=Y2=Y3=Xはダメなようです。ですから上記しかないのでは。 Rangeであれば Sub test02() x = 1 Range("A1:A3") = x '<==== MsgBox Range("A1") MsgBox Range("A2") MsgBox Range("A3") End Sub が可能です。 -- Sub test03() Dim temp As Variant Dim b As Variant temp = Array(1, 2, 3) Range("A1:A3") = temp 'これは不可 b = temp MsgBox b(0) MsgBox b(2) End Sub

その他の回答 (1)

  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.1

Y1=X DIM で変数の型は、同じにしてありますか?。 型が違うとエラーになる場合が有ります。

関連するQ&A

  • excel vba で変数に格納そして取り出し方

    参考書、相談室で教えて頂き、何とかなっておりましたが、変数に格納、その数値を取り出すことについて、基本的な事をもう一度基本を教えて頂けませんか。 今,sheet2の、b3セルの数値が変化しています、それをSheet1のb3セルが参照しています。 そのsheet1の参照セルの数値を変数に格納し、それを読み出して使いたいのですが、うまくできません、どのように考えたらいいのですか。現在は、下記コードの、k、の引き数の変化ができなく暗礁に乗り上げております。 set temp = worksheets(("描画").shapes.addTextbox(mosTextboxorientationHorizontal.86,k,66,18) の、,k、の数値を変化させたいのですが出来ません。 sheet1のセルの数値を変化させないで、一つの数値に固定すれば、問題なく目的の描画が行われます。 変数に格納、for....nextで取り出して等いろいろ試みましたが、参照セルが変化すると描画しません。 申し訳ありませんが、もう一度教えて頂けませんか。

  • VBAで変数に改行を格納した場合

    セルA1に あああ いいい と入れて、 VBAで Dim str As String str = Range("a1") と言うコードを記述して、ステップモードでstrにカーソルを充てると あああいいい と、変数が格納されるのですが、 変数の値は改行されては表示されないのですか? うぃっちウインドウで監視すると、若干空白があるように感じます。 でも私はよくF8で変数にカーソルを充てて今の値を見るのですが 変数に改行があるかどうかは、この方法ではわからないということですか?

  • エクセルのVBAを使って、セルの値の検索をしたいと思ってます。

    エクセルのVBAを使って、セルの値の検索をしたいと思ってます。 ですが、cells.findのように、アクティブセルが移動することなしに、値のみを取得し、変数に格納したいと思っていますが、どうすればよいか、見当がつきません。 繰り返し構文を使えば、検索はできますが、それだと、無駄に重くなりそうなので、何か良い方法はありませんか?

  • エクセルのvbaが変数を使用すると上手く動作しない

    ものすごく初歩的な質問で恐縮ですが、教えて下さい。 やりたいことは、 「a」を変数として設定して、Cells(1, 1)を「a」に格納して、 セル番地A1に山という文字を入力しようとしています。 <test>の方は上手く動作してセル番地A1に山という文字列を入力できるのですが、 <test2>の方は、セル番地A1に入力してくれません。 おそらく変数の使い方がおかしいのだと思います。 a = Cells(1, 1)ではなく、test2のように、変数を使ってコードを記載したいのですが良い方法はありませんでしょうか? *************************************************************** Sub test () a = Cells(1, 1) Cells(1, 1) = "山" End Sub **************************************************************** Sub test2 () a = Cells(1, 1) a = "山" End Sub

  • ExcelVBA シート間のコピー時に値の足し算

    よろしくお願いします。 Excel2003 VBAで異なるシート間でセルのコピーをしています。 ある条件の時だけコピー先のセルに値を足し込みたいのですがうまくいきません。 以下、1部抜き出しで申し訳ありませんが問題のコードを記載します。 各配列にはコピー元シートのセル列数(C_Arr)とコピー先シートのセル行数(B_Arr)・列数(A_Arr)を指定してあります。 For y = 1 To UBound(B_Arr) For x = 1 To UBound(A_Arr) If A_Arr(x) = 22 Then Worksheets("A").Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy Worksheets("B").Cells(B_Arr(y - 1), A_Arr(x - 1)).PasteSpecial Paste:=xlValues, Operation:=xlAdd Application.CutCopyMode = False Else Worksheets("A").Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy _ Destination:=Worksheets("B").Cells(B_Arr(y - 1), A_Arr(x - 1)) End If Next x Next y コードを実行するとエラーにはならないのですが、値が足し込まれず最後のコピー値が上書きされる 結果となります。 うまくいく方法を教えて下さい。

  • エクセル VBA find は別シートを検索できますでしょうか?

    こんばんわ。マクロ初心者です。 皆さんいつも親切なご回答ありがとうございます。 早速ですが質問内容を記入いたします。 ・ブックA を開いています。 選択している行のC列セルの値を検索キーワードにして、 ブックB 内を検索し、検索結果のセルの3つ左のセルの値を、 ブックA で選択していたセルの同じ行のO列(15列目)に入力したいです。 ※ブックBをアクティベートする事無く行えますでしょうか? (他の処理と組合わせて行い、回数も多いので、  ブックA⇔ブックB アクティベートの往復は避けたいです。) 下のようなマクロを作成してみましたがうまくいきません。 どうかご指導よろしくお願いいたします。 --------------------------------------------------------------- dim 検索品目 as string dim fcell as object dim i as integer i = Selection.Row '選択行の3列目セルの値を変数『検索品目』に格納 検索品目 = Cells(i, 3).Value 'オブジェクト変数『fcell』に検索したセルを格納 Set fcell = Cells.Find(What:=検索品目, After:=Workbooks("ブックB.xls").Worksheets("sheet1").Range("G2"), LookAt:=xlWhole, searchorder:=xlByColumns) '検索したセルの3行左のセルの値を変数『オーダ番号』に格納 オーダ番号 = fcell.Offset(, -3).Value 'ブック A の選択行の15列(O列)にデータ入力 Cells(i, 15) = オーダ番号

  • 【エクセルVBA】「インデックスが有効範囲にありません」というエラーがでます

    こんにちは。VBA初心者ですが、下記コードを実行すると エラーが出てしまいました。 シート(シート1)のセルから別シート(シート2)のセルに 値のみコピーするVBAを組んでいます。 適宜、シート1に入力したものを読みこませていきたいので 変数を使用しています。 ------------------------------------------------------------- Sub セルのコピー() Dim X As Integer X = 3 Y = 2 Do While Cells(X, "A").Value <> "" Sheets("シート1").Cells(X, "A").Copy Sheets("シート2").Activate Sheets("シート2").Cells(Y, "F").PasteSpecial _ Paste:=xlPasteValues ⇒エラー対象 Application.CutCopyMode = False X = X + 1 Y = Y + 1 Loop End Sub ------------------------------------------------------------ つまり、シート1のA3セルを先頭にA4,A5,A6・・・と続くセルの値 をシート2のF2を先頭としたセル(以下、F3,F4・・・)に値のみコピー していきたいのですが。。 実行すると「インデックスが有効範囲にありません」というエラーが でます。デバック対象は上記、「⇒エラー対象」の構文です。 変数の設定の仕方がおかしいのでしょうか。。 ご教示のほどよろしくお願いいたします。

  • セル範囲を変数に格納したい

    セル範囲を変数に格納したいのですがどのようなコードになりますか ? (配列に値を読み込むのでは無く、単純にセル範囲を変数としたい) TargetRange = Range("A2:Z2") Set rngFind=TagetRange.Find(What:="A",LookIn:=xlValues,LookAt:=xlPart, ----- )のように使用したい。

  • VBAで検索対象では無いセルが検索される

    下記のようなコードで特定の範囲内を検索しています。 X = 16 Y = 1 Do While Cells(Y, X).Value <> "" Set lFoundCell = Range("K8:K65536").CurrentRegion.Find(What:=Cells(Y, X), lookat:=xlWhole) Y = Y + 1 Loop Cells(X, Y)には文字列が格納されていてK8:K65536の範囲内に同じ値があった場合に lFoundCellに該当箇所をRange型の値で格納しています。 しかし、実際にこれを実行すると検索対象外のB列の値が格納されてしまいます。 たしかにB列にはCells(Y, X)と同じ値があるのですが 検索対象はK8:K65536に限定されているはずです。 これはなんでなんでしょうか? 何かコードにミスがあればお教えください。 よろしくお願いします。

  • EXCEL2010 VBA 変数への代入

    EXCEL2010のVBAを使用しています。 処理で繰り返しの処理があります。 繰り返しのたびに変数Aに変数A+セルの番地(A1等)を代入していきたいのですがうまくいきませんどうすればよいでしょうか? 説明が下手ですみません。 ようするに変数の中の値を上書きせずに、現在の値を後ろに追加したいということです。 (例) 変数Bは最初は「1」 繰り返し1回目  変数A =変数A&Cells(1,変数B)   ’変数Bは繰り返しのたびに1ずつ増えます 繰り返し2回目  変数A =変数A&Cells(1,変数B) 一回目は変数AにはA1が入る 2回目の処理時にはA1B1というふうになり、上書きされず追加で代入される。 というようなイメージです。

専門家に質問してみよう