ExcelのVBAを組みたいのですが、イマイチうまくハマりません。
A B C D E
1【日時】 2020/11/25
2【名前】 佐藤、田中
3
4
5
6(詳細) 名前 性別 年齢 役職
7 佐藤 男 40 社員
上記のようなセルの値を1つテキストボックスにまとめてシート内に表示したいのですが、なかなか上手くいきません。
出来ない事としては
①
セルの位置関係をそのままにしてテキストボックス化
②
セルの行に空欄がある場合に上に詰めた状態でテキストボックス化
となります。
そのまま、テキストボックスを作成してコピペしても①の位置関係がズレてしまい改行も出来ない状態になってしまいます。
どなたかご教示のほどお願いいたします。
No.4ベストアンサー
- 回答日時:
他のご質問者も指摘しておられますが、ご質問者のやりたい事、すでにできていること、課題となっていることが今ひとつ不明です。
ご質問者からの反応もありません。
このため、一部推測を含めて、サンプルのVBAを作成してみました。
テキストボックスの表示対象となる各セルに「セル内改行」があった場合、テキストボックス内で改行するとレイアウトが崩れてしまうので、「セル内改行」は削除する仕様です。
B2にあえて、セル内改行を含むデータを入れてテストしました。
添付画像①のデータがあったとして、このVBAを実行した結果が添付画像②です。
Sub Sample()
Dim Text_buf As String
Dim Line_buf As String
Dim i As Long
Dim j As Long
Dim Mystr As String
Text_buf = "" '---テキストボックス書込みバッファをクリア
For i = 1 To 7 '---行範囲で繰り返し
Line_buf = "" '---一行分のバッファをクリア
For j = 1 To 5 '---列範囲で繰り返し
Mystr = Cells(i, j).Value '---対象セルの値をMystrに代入
Mystr = WorksheetFunction.Clean(Mystr) '---セル内改行を削除
Line_buf = Line_buf & Trim(Mystr) & vbTab'---一行分のバッファにMystrの値をタブ連結で追加
Next
If Trim(Replace(Line_buf, vbTab, "")) <> "" Then'------一行分のバッファが空でなかったら
Text_buf = Text_buf & Trim(Line_buf)'---テキストボックス書込みバッファに一行分を追加
If i <> 7 Then '---最終行でなかったら
Text_buf = Text_buf & vbCrLf '---改行する
End If
End If
Next
Call textbox(Text_buf, "F1")'---指定セル位置にテキストボックスを作成し、テキストバッファを書き込む
End Sub
Sub textbox(str, area)
Dim c As Range
For Each c In ActiveSheet.Range(area)
'---指定セル位置にテキストボックスを作成し、選択する
ActiveSheet.Shapes.AddTextbox( _
Orientation:=msoTextOrientationHorizontal, _
Left:=c.Left, _
Top:=c.Top, _
Width:=c.Width, _
Height:=c.Height).Select
With Selection
.Characters.Text = str '---テキストに文字の内容を設定
.AutoSize = True '---自動サイズ調整にする
End With
c.Select '---テキストボックス選択を解除
Next
End Sub
ご丁寧にソースコードまでありがとうございます。
少し試してみて、中身の構文について自分で勉強して理解してみます。
この度はありがとうございました。
No.3
- 回答日時:
①は、列の区切りにvbTab、行の区切りにvbLfを連結してテキストボックス化すれば良いだけのような気がするのですが、それではダメなのでしょうか?ダメな場合、何がダメなのでしょうか?
②は、ちょっと意味が分かりません。行の中にひとつでも空白のセルがある場合は、その行は無かったことにして、上に詰める?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) 至急です><Excelの関数を教えてください。 2 2022/03/22 17:56
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
エクセルファイルに _x000D_ と...
-
Excelでcsvやtxtで保存する時に...
-
マウスポインターが白十字のまま
-
セルは大きくさせず、中の文字...
-
エクセルで画像を透過させて画...
-
エクセルでセルを上下に結合し...
-
エクセルで1つのセルにスクロ...
-
エクセルの入力規則プルダウン...
-
エクセルの白黒の反転で困って...
-
エクセルで半角漢字
-
EXCELに改行なしで1つのセルに...
-
エクセル2013で英単語を折り返...
-
VBA:結合されたセルに対する「...
-
エクセルで右隣のセルより優先...
-
セルを結合しても、文字をセル...
-
表1つのセルに2つの項目を入力...
-
エクセルで特定の列のセルだけ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
エクセルの白黒の反転で困って...
-
セルは大きくさせず、中の文字...
-
マウスポインターが白十字のまま
-
エクセルファイルに _x000D_ と...
-
Excelでcsvやtxtで保存する時に...
-
エクセルで画像を透過させて画...
-
エクセルで1つのセルにスクロ...
-
エクセルでセルを上下に結合し...
-
エクセルの2つのセルを内容も消...
-
セルを結合しても、文字をセル...
-
エクセルで特定の列のセルだけ...
-
エクセルの入力規則プルダウン...
-
VBA:結合されたセルに対する「...
-
エクセルで右隣のセルより優先...
-
Excel入力で勝手にエンター押さ...
-
エクセル 折り返して全体を表...
-
エクセル2013で英単語を折り返...
おすすめ情報