Excel VBA質問箱 IV

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

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


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

【42237】数行の文字を連結したい TAKA 06/9/4(月) 19:51 質問[未読]
【42239】Re:数行の文字を連結したい ハチ 06/9/4(月) 20:17 発言[未読]
【42240】Re:数行の文字を連結したい ichinose 06/9/4(月) 20:31 発言[未読]
【42246】Re:数行の文字を連結したい TAKA 06/9/4(月) 22:22 回答[未読]
【42250】Re:数行の文字を連結したい ichinose 06/9/4(月) 22:41 発言[未読]
【42254】Re:数行の文字を連結したい TAKA 06/9/4(月) 23:38 お礼[未読]
【42262】Re:数行の文字を連結したい Kein 06/9/5(火) 10:28 発言[未読]
【42249】Re:数行の文字を連結したい TAKA 06/9/4(月) 22:35 お礼[未読]

【42237】数行の文字を連結したい
質問  TAKA  - 06/9/4(月) 19:51 -

引用なし
パスワード
   マクロ超初心者です。
A列に数行にわたって書かれた短い文章を連結するマクロを作成したいと
初心者なりに頑張ってみました。初期の目的は達成したのですがどうも
気に入りません。
行数に前提条件があるのと、構文がいかにも初心者・・・・・・。
どなたか行数に前提のないスマートな方法を教えて下さい。

元データー
A10    ○○○    ←やりたいこと
A11    △△
A12    ×××
 ↓
結果
A10    ○○○△△×××

ちなみに3行までのものを載せておきます
(恥ずかしながらこの方法で実際には行を増やしてやっています)

Sub 短文合成()

Dim m As Integer
m = Selection.Rows.Count

  ActiveCell.Offset(m, 0).Rows("1:1").EntireRow.Select
  Selection.Insert Shift:=xlDown
  If m = 3 Then
   ActiveCell.FormulaR1C1 = _
    "=CONCATENATE(R[-3]C,R[-2]C,R[-1]C)"
    
   ElseIf m = 2 Then
   ActiveCell.FormulaR1C1 = _
    "=CONCATENATE(R[-2]C,R[-1]C)"
    
  End If
  
  ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
  Selection.Insert Shift:=xlDown
  ActiveCell.Offset(-1, 0).Range("A1").Select
  Selection.Copy
  ActiveCell.Offset(1, 0).Range("A1").Select
  Selection.PasteSpecial Paste:=xlPasteValues
  ActiveCell.Offset(-1 - m, 0).Rows("1:" & CStr(m + 1) & "").EntireRow.Select
  Selection.Delete Shift:=xlUp
  
End Sub
    
以上、宜しくお願いします。

【42239】Re:数行の文字を連結したい
発言  ハチ  - 06/9/4(月) 20:17 -

引用なし
パスワード
   ▼TAKA さん:

どの範囲の文字列を、どこに が不明確なので良くわかりませんが。

選択範囲を先頭にセルを挿入して・・なら
Sub Test()

Dim R As Range
Dim Str As String

  For Each R In Selection.Cells
    Str = Str & R.Value
  Next R
  
  ActiveCell.Insert xlDown
  ActiveCell.Value = Str

End Sub

このマクロだと
複数列を選択すると結合の並びは制御できません。

【42240】Re:数行の文字を連結したい
発言  ichinose  - 06/9/4(月) 20:31 -

引用なし
パスワード
   こんばんは。

Sub test()
  Dim rng As Range
  Dim myarray As Variant
  Set rng = Range("a10", Cells(Rows.Count, "a").End(xlUp))
  If rng.Row >= 10 And rng.Count > 1 Then
   myarray = Application.Transpose(rng.Value)
   Range("a10").Value = Join(myarray, "")
   End If
End Sub

試してみてください

【42246】Re:数行の文字を連結したい
回答  TAKA  - 06/9/4(月) 22:22 -

引用なし
パスワード
   ▼ichinose さん:さっそくのご教授ありがとうございます。
試してみたら、myarray・・・の行で
「型が一致しません」とのエラーメッセージが出てしまいました。
申し訳ありませんが、再度教えていただけますか。

ハチさん、ありがとうございます。
質問書に添付したマクロはA10からA13に文字が入っていて、マクロを実行すると
A10に繋がった文章が出来るものです。
A9にもA14にも文章があるため、これらに影響させたくないと思っています。


>こんばんは。
>
>Sub test()
>  Dim rng As Range
>  Dim myarray As Variant
>  Set rng = Range("a10", Cells(Rows.Count, "a").End(xlUp))
>  If rng.Row >= 10 And rng.Count > 1 Then
>   myarray = Application.Transpose(rng.Value)
>   Range("a10").Value = Join(myarray, "")
>   End If
>End Sub
>
>試してみてください

【42249】Re:数行の文字を連結したい
お礼  TAKA  - 06/9/4(月) 22:35 -

引用なし
パスワード
   ▼ハチ さん:ありがとうございます。
試してみたら肝心な文章の連結はうまくいきました。
あと少し手直しすれば完了しそうです。ここまでくれば
自分で何とかしたいと思います。本当にありがとうございました。

>▼TAKA さん:
>
>どの範囲の文字列を、どこに が不明確なので良くわかりませんが。
>
>選択範囲を先頭にセルを挿入して・・なら
>Sub Test()
>
>Dim R As Range
>Dim Str As String
>
>  For Each R In Selection.Cells
>    Str = Str & R.Value
>  Next R
>  
>  ActiveCell.Insert xlDown
>  ActiveCell.Value = Str
>
>End Sub
>
>このマクロだと
>複数列を選択すると結合の並びは制御できません。

【42250】Re:数行の文字を連結したい
発言  ichinose  - 06/9/4(月) 22:41 -

引用なし
パスワード
   ▼TAKA さん:
>▼ichinose さん:さっそくのご教授ありがとうございます。
>試してみたら、myarray・・・の行で
>「型が一致しません」とのエラーメッセージが出てしまいました。
myarrayは
>>   myarray = Application.Transpose(rng.Value)
>>   Range("a10").Value = Join(myarray, "")

のどちらの行ですか?

>>Sub test()
>>  Dim rng As Range
>>  Dim myarray As Variant
   Set rng = Range("a10:A13")
>>  If rng.Row >= 10 And rng.Count > 1 Then
>>   myarray = Application.Transpose(rng.Value)
>>   Range("a10").Value = Join(myarray, "")
>>   End If
>>End Sub

これではどうなりますか?

【42254】Re:数行の文字を連結したい
お礼  TAKA  - 06/9/4(月) 23:38 -

引用なし
パスワード
   ▼ichinose さん:たびたびすいません。

>>試してみたら、myarray・・・の行で
>>「型が一致しません」とのエラーメッセージが出てしまいました。
>myarrayは
>>>   myarray = Application.Transpose(rng.Value)
>>>   Range("a10").Value = Join(myarray, "")
>
>のどちらの行ですか?

 myarray = Application.Transpose(rng.Value) この行です。


>>>Sub test()
>>>  Dim rng As Range
>>>  Dim myarray As Variant
>   Set rng = Range("a10:A13")
>>>  If rng.Row >= 10 And rng.Count > 1 Then
>>>   myarray = Application.Transpose(rng.Value)
>>>   Range("a10").Value = Join(myarray, "")
>>>   End If
>>>End Sub
>
>これではどうなりますか?

Set rng = Range("a10:A13") に変更してみましたが結果は同じでした。

親切に教えていただいていながら何なんですが、ハチさんから教えていただいた
方法で何とかなりそうなので、そちらの方で進めたいと思います。
ichinoseさんの言わんとすることを直ぐに理解できるようになりたいと思っています。
ありがとうございました。

【42262】Re:数行の文字を連結したい
発言  Kein  - 06/9/5(火) 10:28 -

引用なし
パスワード
   解決済みのようですが、以下のようにすれば出来ると思います。

Sub Data_Alg()
  Dim MyV As Variant
   
  With WorksheetFunction
   MyV = .Transpose(.Transpose( _
   .Transpose(Range("A10:A13").Value)))
  End With
  Range("A10").Value = Join(MyV, "")
  Range("A11:A13").ClearContents
End Sub

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