• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで選択してるセルに決まった動作をマクロに)

エクセルでセルの内容を横展開する方法

このQ&Aのポイント
  • エクセルで特定のセルに対して決まった動作をさせるためには、マクロを使用することができます。
  • ただし、マクロの記録では最初に選択したセル番地で動作するため、実際に選択されるセルに合わせて動作するようにする必要があります。
  • 例えば、A列の5〜6行目を選択して、そのセルの内容を文字区切りで横に展開するためには、マクロを以下のように記述します。 Sub Macro1() Range("A5:A7").Select Selection.TextToColumns Destination:=Range("A5"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar :="\", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _ 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1)), TrailingMinusNumbers:=True End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (788/1647)
回答No.5

「\」 で区切りたい、これを指定の範囲ではなく、選択した範囲にしたいのですね。 範囲指定をした後、ボタンを押して実行ですね。 Range("A5:A7").Select Destination:=Range("A5"), この2か所を消せば、固定でなく選択した範囲になります。 上はデータの範囲、下は出力位置を指定しています。 注意点として 「,」 もけします。 ちなみに、これだけでできます。 Sub Macro1()   Selection.TextToColumns OtherChar:="\" End Sub

akira0723
質問者

お礼

本日目的のシートにコードを入力して正常に動作することを確認しました。 添削&解説までありがとうございました。

akira0723
質問者

補足

ご回答ありがとうございます。 マクロの記録で作られたコードの添削ありがとうございます。 ご回答の箇所の削除で期待の結果が得られました。 今後もこの方法(セルを選択して記録して当該部分の削除)で手っ取り早くマクロを使えることになるので非常に参考になりました。 ただ、第2のコードでは、なぜか「区切り位置」の操作が途中で止まるようです。 おそらく当方のシートの問題だと思います。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

マクロの記録しかしてないレベルでは、ややこしい。常識の部分も文章説明が必要で、説明も長くなる。下記で分かりますかな。 ・シート(Sheet1とする)の画面で ・ALT+F11 ・VBEの画面になる。 ・表示ープロジェクトエクスプローラーでプロジェクトエクスプローラーのウインドウを表示する。通通常は、右上に出る。 ・右上側のプロジェクトエクスプローラーのウインドウでSheet1を探し、 そこでマウスで右クリック.名前を変えているとそれに変わって表示される。 ・「コードの表示」をクリック ・その画面の左上部側の(オブジェクト選択)「General」でWorksheet、右側(イベント選択)の「Declaration」でSelectionChangeを選ぶ。 ・すると Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub が自動的に出る。 ・真ん中の行に If Target.Address = "$A$3" Then MsgBox "aaa" End If と入れる。本内容は納得のためのテスト用。 ・テストとして、シートの画面に戻り(その方法は、Sheet1を選んでおいてーオブジェクト表示のアイコン(すぐ上にある)をクリックでシート画面に戻る)の、Sheet1シートのA3セルをクリックして選択する。 ・すると画面のメッセージ・ボックスにに「aaa」が表示されるので、OKで脱す。 ・本番では、MsgBox "aaa"の1行を、質問者の例では、Macro1に置き換える。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Macro1 End Sub とする。 A3セルを選択するとMacro1Mの内容がが実行される。 今回はMacro1の作業内容とA3セル選択の整合性は考えてない説明のためのものであることを断っておく。 ーーー これは決まった1つのセルを選択したことをトリガにして実行するもの。 別に他のニーズでは、想定したセル範囲内の、どこかの1セルをクリックすると、実行、などということもコードを修正すればできる。 想定した下セルの判定をTarget.Address =「セル番地を表す文字列」(小文字などではだめのようです。例 "$A$3" ーー> "$a$3" はダメだった)で判定しているが、他の書き方もある。

akira0723
質問者

お礼

ご回答ありがとうございます。 基礎知識がないので非常に参考になりました。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

データーがA列と決まっているのなら Sub Test()   With Selection     If .Columns.Count = 1 And .Column = 1 Then       .TextToColumns , DataType:=xlDelimited, Other:=True, OtherChar:="\"     End If   End With End Sub

akira0723
質問者

お礼

ありがとうございます。 早速試してみて期待通りに動きました。

  • WDY
  • ベストアンサー率27% (136/492)
回答No.2

Sub Worksheet_SelectionChange(ByVal Target As Range) で実行しセルの座標を取り 特定のセルの場合実行の条件分岐を入れれば出来ると思います https://jizilog.com/vba-selectchange

akira0723
質問者

お礼

早々のご回答ありがとうございます。 試してみましたが最初にエラーが出て、手動でマクロを実行すると期待通りに動くことを確認しました。 当方の質問の説明不測のようです。 実際の使い方は、ファルダーにあるファイルのパスをコピーしてエクセルに張り付け手、マクロでフォルダ名を横に展開する。ことでした。 教えていただいた自動マクロだと、ファイルのパスをコピーして、エクセルの目的の場所に張り付けようとセルをクリックした瞬間にエラーが出ます。 これを無視してマクロを実行するとちゃんと動くのですが。。。。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.1

Range("A5:A7").Select を外して Range("A5") を Selection(1) にしてみてください。 Sub Macro1() Selection.TextToColumns Destination:=Selection(1), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _ :="\", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _ 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1)), TrailingMinusNumbers:=True End Sub

akira0723
質問者

お礼

早々のご回答ありがとうございます。 動作確認し期待通り動きました。 これで何度も同じ作業せずに「マクロボタン」クリックでできるので非常に助かります。 この作業は最初から区切り位置でセル内容を分割していたので、マクロ化することに気が付かず人に引き継ごうとしてマクロ化に気が付きました。 もっと早く相談していればよかったです。

関連するQ&A