• ベストアンサー

EXCELの範囲編集について

以下の通りの1セルに対しての編集は既に分かっているのですが ******************* Dim ExlApp As Excel.Application ExlApp.Range("A1").Value = "1" ******************* ある範囲を一気に編集したい場合は どのように変数に値をセットしてから、 EXCELに書き込むようにコーディングしたら 良いのでしょうか? お手数ですが教えてください。よろしくお願いします。

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

  • ベストアンサー
回答No.5

セルに配列をセットする場合、2次元配列を使います。 (1行のみなら1次元配列でもできます。) いろいろ試しながらサンプルを作ってみました。 (配列の宣言の違いや、セルから値を持ってきた場合の  配列の作られ方などを見てください) (文字列配列・数値配列だから、この方法というわけではありません) test()を実行後、test2()を実行してみてください。 test3()は1次元配列でのテストです。 (列では、うまくセットできない事を確認してください) Sub test()   Dim b(1 To 5, 1 To 3) As String   Dim c(4, 2) As Integer   '配列の値をセルにセット   b(1, 1) = "1": b(1, 2) = "2": b(1, 3) = "3"   b(2, 1) = "a2": b(2, 2) = "b2": b(2, 3) = "c2"   b(3, 1) = "a3": b(3, 2) = "b3": b(3, 3) = "c3"   b(4, 1) = "a4": b(4, 2) = "b4": b(4, 3) = "c4"   b(5, 1) = "a5": b(5, 2) = "b5": b(5, 3) = "c5"   Range("A1:C5") = b   '配列の値をセルにセット   c(0, 0) = 8: c(0, 1) = 7: c(0, 2) = 6   c(1, 0) = 1: c(1, 1) = 1: c(1, 2) = 1   c(2, 0) = 2: c(2, 1) = 2: c(2, 2) = 2   c(3, 0) = 3: c(3, 1) = 3: c(3, 2) = 3   c(4, 0) = 4: c(4, 1) = 4: c(4, 2) = 4   Range("B10:D14") = c End Sub Sub test2()   Dim a As Variant   'セルから値を取得   a = Range("B10:D14")   For x = LBound(a, 1) To UBound(a, 1)     For y = LBound(a, 2) To UBound(a, 2)       'イミディエイト ウィンドウに表示       Debug.Print "(" & x & "," & y & ")= " & a(x, y)       '配列編集       a(x, y) = a(x, y) + y     Next y   Next x   'セルに値を代入   Range("B10:D14") = a End Sub Sub test3()   Range("A21:A23") = Array(21, 22, 23)   Range("A24:C24") = Array("A24", "B24", "C24") 'できない   Dim b(2)   b(0) = 1: b(1) = 2: b(2) = 3   Range("A21:A23") = b   Range("A24:C24") = b 'できない End Sub 私の場合は、  セルから取得した配列の最小番号が1から始まるので  Dim b(1 To 5, 1 To 3) As String  こちらの配列宣言で処理します。  1列分の1次元配列をセットする方法が出来るのか  わかりませんので、2次元配列を使用しています。 いろいろ試してみてください。

kirua777
質問者

お礼

これで、セットすることが出来ました。 初めて、この「教えてgoo」に投稿しました。 ここまで、とても親切な方々がいることに感動しました。 心より感謝申し上げます。

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

その他の回答 (6)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.7

>出来れば、一回のアクションでセル(範囲)に編集したいのですが。 一回のアクションというのは、 シート範囲 = 配列 #5:Range("A1:C5") = b #4:Range("A1:B4").FormulaArray = "={4,5;5,9;7,3;9,12}" で、ほぼ回答は出揃ったと思います。 蛇足ですが、さらに簡単にするなら、 Dim Hairetu Hairetu = Range("A1:C6") 'シートの任意の範囲の値を取得 Range("A10:C15") = Hairetu 'その値を指定範囲に書き込む とすれば、書き込む値はシート上で簡単に編集できます。 コピーできのは、値だけなので書式や式はコピーしません。

kirua777
質問者

お礼

hana-hana3ありがとうございました。 これで大丈夫になりました。 何度も回答して頂き、本当にありがとうございました。

すると、全ての回答が全文表示されます。
回答No.6

#5です。 VBから操作してるのですね。 EXCEL VBAで作ってしまいました。 基本は同じだと思いますが、 うまくいかなかったらすみません。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

#3で回答が出ていますが、エクセルに密着した解を1つ。 配列数式と言われる仕組みの利用です。 Sub test01() Range("a1:a4").FormulaArray = "={4;5;7;9}" End Sub を実行してみてください。 A1:A4のそれぞれのセルにに4,5,7,9が入ります。 Sub test01() Range("A1:B4").FormulaArray = "={4,5;5,9;7,3;9,12}" End Sub だとA1:B4に 4 5 5 9 7 3 9 12 が入ります。「;」は列区切り、「,」は行区切りになり ます。 ●私の個人的お勧めは、10ステップぐらいまでなら cells(i,j)=cells(k,l) を上から下へ1つづつ書き連ねる幼稚的な方法をお勧めします。 内容が直接的に判って見なおししやすいので、安心感があります。これは私だけでしょうか。

kirua777
質問者

お礼

回答ありがとうございます。 こういうセットの方法もあるのですね。 大変勉強になります。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

任意の値を指定範囲に埋め込むことですね? 「配列」を利用すると簡単です。 Dim Hairetu Hairetu = Array("A","B","C","D","E","F","G","H") For i=0 to Ubound(Hairetu) Cells(1,i+1) = Hairetu(i) Next で、A1 - H1 までに値を埋め込んでくれます。 埋め込む範囲が四角の場合は、上記の応用で可能ですが、ばらばらの場合は異なります。 Dim Hairetu,Cel Cel = Array("A1","B5","C8","D1","E6","F3","G100","H1000") Hairetu = Array("A","B","C","D","E","F","G","H") For i=0 to Ubound(Hairetu) Range(Cel(i)) = Hairetu(i) Next で、指定したセルに任意の値を入れる事ができます。

kirua777
質問者

お礼

とても丁寧な説明をありがとうございます。 <(_ _)> 誠に申し訳無いのですが、 出来れば、一回のアクションでセル(範囲)に 編集したいのですが。 よろしくお願いします。m(_ _)m

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

>一気に編集したい場合は 一気に---->プログラムコーディング上で、1ステートメント(ステップ、通常1行)でと言うことでしょうか。VBAの実行は自動でプログラムが実行するのが普通で 瞬時に終わる場合が多いですから、何ステップのモジュールでも「一気」と言えなくもないし・・。曖昧です。 編集」--->編集とは何を意味しますか。例示でもしてください。 ExlApp.Range("A1").Value = "1"の例で 右辺のデータは1通り1データなんですか。 別の複数セルから、左辺の複数セル(範囲)に異なる値をセット(代入)するのではないですか。 同じ値で良いなら Sub test01() Range(Cells(1, 1), Cells(5, 3)) = 2 End Sub を実行すると、A1:C5の15個のセルに、2が入ります。

kirua777
質問者

お礼

回答ありがとうございます。 同じ値では無く。 違う値をセットしたいのです。 誠に説明不足の文章で申し訳ありません。 1セルに対して編集すると、大変処理時間が掛かってしまいます。 そこでExcelに対して編集する前に、 VBの変数に変更する内容を全てセットしておいて、 その変数を一気にセル(範囲)にセットしたいのです。

すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>ある範囲を一気に編集したい場合は 一気に編集というと・・・どういう事でしょう? 単純に同じ値を入れるなら、 Range("A1:C5")="ABC" で可能です。

kirua777
質問者

お礼

回答ありがとうございます。 同じ値では無く。 違う値をセットしたいのです。 誠に説明不足の文章で申し訳ありません。

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

関連するQ&A