複数行1列のセルの文字を結合してアクティブセルにセットしようとするとき、以下のステートメントでは (2)でエラーになります。
Join関数ではabが1次元配列でないとエラーですが、(1)で生成されるabは1次元配列にならないのでしょうか?
または、それ以外の理由でエラーになるのでしょうか?
ご教授を、よろしくお願いいたします。
Public Sub セル文字の結合()
Dim ab As Variant
ab = Range(Selection.Address).Value ・・・(1)
ActiveCell.Value = Join(ab, "") ・・・(2)
・・・・
No.2ベストアンサー
- 回答日時:
質問のカタチに沿ってやると、一旦配列に納めて、Valiantに代入し
Joinを使うことになるようだ。
これ以外のVariantを使った方法が有るかどうかわからない。
こんなことするなら私なら、下記(2)でやる(やってきた。)
Sub test11()
Dim ab As Variant
Dim x()
Erase x
'---A 配列に値をセット
For i = 0 To 4 'A-E 列のデータを対象
ReDim Preserve x(i)
x(i) = Range("A1").Offset(0, i)
Next i
'---B ヴァリアント変数に排列を代入
ab = x
'---C
Range("G1").Activate
ActiveCell.Value = Join(ab, ",")
End Sub
ーーー
下記(2)
Sub test12()
s = ""
For i = 1 To 5
s = s & Cells(1, i) & ","
Next i
Range("G2") = Left(s, Len(s) - 1)
End Sub
ーーー
参考テスト
Sub test03()
Dim a As Variant
Dim b
a = Range("A1:A3") '○
Range("C1:C3") = a '○
b = Join(a, ",") 'X
Range("D1") = b
End Sub
ーー
参考テスト
Sub test13()
a = Array("a", "b", "c")
MsgBox Join(a, ",")
End Sub
出来ない原因は、エクセルのa = Range("A1:A3")とArray関数でのセットの違いに有るようだ。
この回答への補足
ご教授を ありがとうございます。
以下のステートメントで、アクティブシートの任意のセルの文字列を結合してアクティブセルにセットできると思います。
(但し、選択セルが複数行1列か1行複数列限定です:それ以外はエラーとなります)
-----------------------------
Public Sub セル文字列の結合()
Dim ab As Variant
On Error GoTo errMSG
If Selection.Columns.Count = 1 Then '複数行1列の場合
ab = Range(Selection.Address).Value
ActiveCell.Value = Join(WorksheetFunction.Transpose(ab), "")
For Each ab In Selection
If ab.Address <> ActiveCell.Address Then ab.ClearContents
Next
ElseIf Selection.Rows.Count = 1 Then '1行複数列の場合
ab = Range(Selection.Address).Value
ab = WorksheetFunction.Transpose(ab)
ActiveCell.Value = Join(WorksheetFunction.Transpose(ab), "")
For Each ab In Selection 'アクティブセル以外はクリアする
If ab.Address <> ActiveCell.Address Then ab.ClearContents
Next
Else
MsgBox "選択範囲エラーです。複数行1列または1行複数列 限定です。", vbOKOnly + vbCritical
End If
Exit Sub
errMSG:
MsgBox "エラーが出ましたけど・・・", vbOKOnly
End Sub
No.1
- 回答日時:
ウォッチ式でみると、abは2次元配列になってますね。
この回答への補足
早速のご回答を ありがとうございます。
(1)のように記述すると、たとえ複数行1列のセルを選択しても「Selection.Addressの選択範囲は1次元配列にはならず強制的に2次元配列になる」という解釈でよろしいのでしょうか?
因みに、下記のステートメントにするとエラーにはならず、うまくいきます。
Public Sub セル文字の結合()
Dim ab As Variant
ab=Range(Selection.Address).Value・・・(1)
ActiveCell.Value = Join(WorksheetFunction.Transpose(ab), "")
・・・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで配列をまるごとコピー
-
配列数式の解除
-
subの配列引数をoptionalで使う...
-
COBOL 2次元配列について
-
特定のセル範囲で4文字以上入力...
-
エクセルで最小値から0を除く方法
-
配列変数の添字が範囲外ですと...
-
テキストボックスの表示
-
Excel-VBAの配列「Public Const...
-
VBA Match関数の限界
-
fortran 渡す値について
-
【excel VBA】 配列番地の検索
-
教えて下さい
-
エクセルで縦に並んだデータを...
-
Excel2000:Ontimeメソッドで特...
-
ExcelのVBA。public変数の値が...
-
既存のマクロをコンボボックス...
-
エクセルで別のセルにあるふり...
-
フランスの生年月日(jj/mm/aaaa)
-
右クリックによるイベントマク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
VB6 配列を初期化したい
-
特定のセル範囲で4文字以上入力...
-
ListViewで、非表示列って作れ...
-
《エクセル2000》A列・B列の商...
-
配列変数の添字が範囲外ですと...
-
Excel-VBAの配列「Public Const...
-
subの配列引数をoptionalで使う...
-
for each の現在の配列ポインタ...
-
配列を任意の数値で埋める方法
-
Dim は何の略ですか?
-
VBのFunctionで、配列を引数...
-
配列内の内容を全て表示する方法
-
2次元動的配列の第一引数のみを...
-
Excel VBA配列をFunctionに渡す
-
VBA Match関数の限界
-
Array配列の末尾に追加したい。
-
AES暗号にて、AES_set_encrypt_...
おすすめ情報