こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCELの範囲編集について

以下の通りの1セルに対しての編集は既に分かっているのですが
*******************
Dim ExlApp As Excel.Application

ExlApp.Range("A1").Value = "1"
*******************

ある範囲を一気に編集したい場合は
どのように変数に値をセットしてから、
EXCELに書き込むようにコーディングしたら
良いのでしょうか?
お手数ですが教えてください。よろしくお願いします。

投稿日時 - 2004-04-10 16:51:45

QNo.827842

暇なときに回答ください

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

セルに配列をセットする場合、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次元配列を使用しています。


いろいろ試してみてください。

投稿日時 - 2004-04-11 10:02:00

お礼

これで、セットすることが出来ました。

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

投稿日時 - 2004-04-11 11:27:19

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.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 'その値を指定範囲に書き込む

とすれば、書き込む値はシート上で簡単に編集できます。
コピーできのは、値だけなので書式や式はコピーしません。

投稿日時 - 2004-04-11 11:05:28

お礼

hana-hana3ありがとうございました。
これで大丈夫になりました。

何度も回答して頂き、本当にありがとうございました。

投稿日時 - 2004-04-11 11:29:44

ANo.6

#5です。

VBから操作してるのですね。
EXCEL VBAで作ってしまいました。

基本は同じだと思いますが、
うまくいかなかったらすみません。

投稿日時 - 2004-04-11 10:20:34

ANo.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に
45
59
73
912
が入ります。「;」は列区切り、「,」は行区切りになり
ます。
●私の個人的お勧めは、10ステップぐらいまでなら
cells(i,j)=cells(k,l)
を上から下へ1つづつ書き連ねる幼稚的な方法をお勧めします。
内容が直接的に判って見なおししやすいので、安心感があります。これは私だけでしょうか。

投稿日時 - 2004-04-11 06:13:56

お礼

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

投稿日時 - 2004-04-11 11:20:33

ANo.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

で、指定したセルに任意の値を入れる事ができます。

投稿日時 - 2004-04-11 00:26:21

お礼

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

投稿日時 - 2004-04-11 02:36:51

ANo.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が入ります。

投稿日時 - 2004-04-10 19:56:40

お礼

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

投稿日時 - 2004-04-11 00:02:08

ANo.1

>ある範囲を一気に編集したい場合は

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

投稿日時 - 2004-04-10 17:33:10

お礼

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

投稿日時 - 2004-04-10 23:57:18

あなたにオススメの質問