こんばんは。
Sub test()
Dim myStr(200) As String
For 行 = 0 To Cells(Rows.Count, 1).End(xlUp).Row
myStr(行) = Cells(行 + 1, 1)
Next
MsgBox Join(myStr, "_")
End Sub
のようなコート゛を作成し、
アクティブシートのA列の最終行までを取得し、一つにまとめたいのですが
「Dim myStr(200) As String」の部分で
最終行を取得することは不可能でしょうか?
今回は200行なので大丈夫なのですが
場合によっては1行~65536行までさまざまです。
なので
Dim myStr(Cells(Rows.Count, 1).End(xlUp).Row) As String
としたらエラーになりました。
最初から
Dim myStr(65536) As String
とするべきでしょうか?
しかしそうすると
myStrの最後がずっと「________」となってしまいます。
どうするのが適切なのかわかりません。
ご教授よろしくお願いします。
No.6ベストアンサー
- 回答日時:
こんにちは。
通常は、動的配列にするのが一般的ですが、実際の内容を教えていただかないと、なんとも言えません。コードは現実的な内容ではありません。ループして、最後にJoin でつなぐ必要性が認められません。なお、配列変数は、データ型を決めたほうが格納できます。
>myStrの最後がずっと「________」となってしまいます。
Sub test2()
Dim myStr(65535) As String
Dim i As Long
Dim LastRow As Long
Dim buf As String
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'最終行までデータ入っていたら一つしか入らない
For i = 0 To LastRow
myStr(i) = Cells(i + 1, 1)
Next
buf = Join(myStr, "_")
buf = Mid(buf, 1, InStr(buf, "__"))
MsgBox buf
End Sub
配列を使わない法
Sub test3()
Dim i As Long
Dim LastRow As Long
Dim buf As String
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
If LastRow < 2 Then
'フルに入っているかチェックする
If Cells(Rows.Count, 1).Value <> "" Then
LastRow = Rows.Count
Else
Exit Sub
End If
End If
For i = 1 To LastRow
buf = buf & "_" & Cells(i, 1).Value
Next
buf = Mid(buf, 2)
MsgBox buf
End Sub
No.5
- 回答日時:
変数をVariantで宣言する方法もあります。
'---------------------------------
Sub Test333()
Dim myStr
myStr = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value
MsgBox Join(Application.Transpose(myStr), "_")
End Sub
'--------------------------------
この場合、変数myStrは配列になってますので、要素を取り出すときは
For R = LBound(myStr) To UBound(myStr)
MsgBox myStr(R)
Next R
とします。
以上です。
No.4
- 回答日時:
>場合によっては1行~65536行までさまざまです。
[動的配列変数]・[ReDim ステートメント] につきましては回答が出ておりますので、[ReDim ステートメント] のヘルプを参照なさってください。
小さなことかも知れませんが、お示しのコードで要素数の指定を
Cells(Rows.Count, 1).End(xlUp).Row
のままで
Dim myStr(200) As String
を
Dim myStr() As String または Dim myStr As Variant
ReDim myStr(要素数)
に変えますと、
MsgBox Join(myStr, "_")
の最後に余分な "_" が付きますよね。
せっかく「For 行 = 0 To」としていらっしゃるのでしたら、要素数の設定は、最後に「- 1」を付けて
Cells(Rows.Count, 1).End(xlUp).Row - 1
とされた方が、後々問題も生じにくいかと存じます。
ついでに荒技ですが、
Sub oioi()
MsgBox Join(Application.WorksheetFunction.Transpose( _
Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row) _
), "_")
End Sub
みたいなこともできます。
しかし、いずれにいたしましても、対象範囲内に「#VALUE!」などが入るとエラーになりますので、注意が必要です。
配列の宣言でデータ型を誤ったり、要素数を指定しなかったり(空の括弧を付けたり)、配列に格納し損ねると
>コンパイル エラー 配列がありません。
>実行時エラー '13': 型が一致しません。
>実行時エラー '9': インデックスが有効範囲にありません。
などの エラー メッセージ が表示され、結構面倒ですが、「何でだろぉ~、何でだろぉ~...」と原因を究明していくと、結構面白いですよね。
・・・以上、ど素人の独り言でした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
IF関数でEmpty値を設定する方法。
-
変数を動的に作るには?
-
VBで作った乱数を一度も重複さ...
-
複数のテキストボックスに同じ...
-
動的配列と固定長配列の違いに...
-
動的配列が存在(要素が有る)か...
-
C言語のread関数に関するファイ...
-
2次元配列の、黒いマス目で囲...
-
キーボード
-
Excel VBA 多段階配列の宣言の仕方
-
【MFC】GetCount()とGetSize()...
-
配列プロパティをREDIMする方法...
-
MicroSoft BasicのDim文とVisua...
-
配列をリサイズする
-
4次元配列を2次元配列にするには?
-
VB.net 引数で配列変数を渡す際...
-
配列にnullを代入すると、null...
-
ループ処理の際、最後だけ","を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
変数を動的に作るには?
-
VB.net 引数で配列変数を渡す際...
-
動的配列が存在(要素が有る)か...
-
VBで作った乱数を一度も重複さ...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
javaプログラムについて
-
C#の質問
-
Visual C++ でコントロールを...
-
遅延バインディングを使用でき...
-
Excel VBAで配列の途中から(X)M...
-
排列と配列の漢字の使い分けは
-
For文と配列
-
VBでbyte配列型のインスタンス...
-
C言語で3次元配列の課題をして...
おすすめ情報