Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6889 / 13646 ツリー ←次へ | 前へ→

【42520】配列について かじったばかり 06/9/13(水) 19:39 質問[未読]
【42528】Re:配列について ichinose 06/9/13(水) 21:27 発言[未読]
【42531】Re:配列について かじったばかり 06/9/13(水) 22:15 お礼[未読]

【42520】配列について
質問  かじったばかり  - 06/9/13(水) 19:39 -

引用なし
パスワード
   いつも勉強させていただいています。
早速ですが次のコード 1 と 2 では同じような結果
でませんがどうしてかわかりません。ご教授下さい。

1 C1からC3に1 2 3 と入力し下記コード実行すると
  B1から下に 1 2 3 と表示されます。

Dim myRange As Range
Dim buf1
Set myRange = Worksheets("Sheet1").Range("C1:C3")
Worksheets("Sheet1").Range("B1").Resize(UBound(buf1)).Value = buf1

2 フォームにTextBoxが3つあり それぞれに 1 2 3
  と入力後下記コードを実行すると
  A1からA3 に1 1 1 と表示される(TextBox1の値のみ)
  TextBox2 TextBox3の値が表示されない

Dim buf(1 To 3)
Dim i As Integer
With Me
  For i = 1 To UBound(buf)
    buf(i) = .Controls("TextBox" & i).Value
   Next i
End With
   Worksheets("Sheet1").Range("A1").Resize(UBound(buf)).Value = buf



Worksheets("Sheet1").Range("A1").Resize(UBound(buf)).Value = buf
部分を
For i = 1 To UBound(buf)
    Worksheets("Sheet1").cells(i,1).value=buf(i)
Next i
にすると
A1からA3 に1 2 3 と表示される

判り難い説明かと思いますがよろしくお願いします。

【42528】Re:配列について
発言  ichinose  - 06/9/13(水) 21:27 -

引用なし
パスワード
   ▼かじったばかり さん:
こんばんは。

>いつも勉強させていただいています。
>早速ですが次のコード 1 と 2 では同じような結果
>でませんがどうしてかわかりません。ご教授下さい。
>
>1 C1からC3に1 2 3 と入力し下記コード実行すると
>  B1から下に 1 2 3 と表示されます。
>
>Dim myRange As Range
>Dim buf1
>Set myRange = Worksheets("Sheet1").Range("C1:C3")
>Worksheets("Sheet1").Range("B1").Resize(UBound(buf1)).Value = buf1
↑これでは、エラーになってしまいますね!!

Sub test()
  Dim buf1 As Variant
  buf1 = Worksheets("Sheet1").Range("C1:C3").Value
  Worksheets("Sheet1").Range("B1").Resize(UBound(buf1)).Value = buf1
End Sub

ということでしょうか?
でもこの時のBuf1に作成される配列は、Buf1(1 to 3,1 to 1)
こんな形の2次元配列が作成されます。


よって、


>Dim buf(1 To 3)
'これは、1次元配列ですから、結果が違ってきます。

>Dim i As Integer
>With Me
>  For i = 1 To UBound(buf)
>    buf(i) = .Controls("TextBox" & i).Value
>   Next i
>End With
  Worksheets("Sheet1").Range("A1").Resize(UBound(buf)).Value = _
     Application.Transpose(buf())

としてみてください。

【42531】Re:配列について
お礼  かじったばかり  - 06/9/13(水) 22:15 -

引用なし
パスワード
   ▼ichinose さん:
早速ありがとうございます。

>Sub test()
>  Dim buf1 As Variant
>  buf1 = Worksheets("Sheet1").Range("C1:C3").Value
>  Worksheets("Sheet1").Range("B1").Resize(UBound(buf1)).Value = buf1
>End Sub
>
>ということでしょうか?

貼り付けミスです。その通りです。
>でもこの時のBuf1に作成される配列は、Buf1(1 to 3,1 to 1)
>  こんな形の2次元配列が作成されます。
この場合1次配列Buf1(1 to 3)ですると エラーが出ます
1次配列ではできないのですか?必然的に2次配列になる?

>  Worksheets("Sheet1").Range("A1").Resize(UBound(buf)).Value = _
>     Application.Transpose(buf())
>
>としてみてください。

上記のように変更しバッチリ動作しました。
もう少し1次2次の配列勉強してみます。
ありがとうございます。

6889 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free