• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル マクロ セルを縦に結合したいです。)

エクセルマクロでセルを縦に結合する方法

このQ&Aのポイント
  • エクセルマクロを使用して、セルを縦に結合する方法をご説明します。
  • 具体的には、指定のセルに入力があった場合、その隣のセルにメッセージを表示し、さらに指定範囲のセルを縦に結合し、文字を縦書きにする方法です。
  • マクロコードを使える方であれば簡単に実装できるので、ぜひお試しください。

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

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

勿論、下記は小生個人の意見ですが。 アイデアそのものが、初心者の思い付きで、エクセルの処理としては、通常解説書などで解説されている事項から逸脱していると思う(したがって、そうしたければ、高等なことを使わないとできなかったりする)。 やはり仕事でVBAを使うようなことなら、方向性を決めるため、周りに指導者が要るように思う。またはVBAスクールへ行くとか。  考えている設計の難しいことの難易がわからず、素人には、人間には簡単に見えても、高等な機能が必要で、それを実現しようとしたりして、前に進まい恐れがある。 特に他人(エクセル初心者)に入力や結果利用や入力チェックや他のソフトとの連携を図ると、コードが、複雑化する。 これらはプロなら、お客さんに答えねばならず、ソフトは商品なので、要望を聞かなえばならないが。 == >何か入力されれば、その隣のセルに「お疲れ様です」と入力される (1)何か入力されれば 第2-10行限定は たとえばSheet1のChangeイベントに、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row >= 1 And Target.Row <= 10 Then 処理のコード End If End Sub といった仕掛けをする。VBAの本も十分読んでない、初心者にはお勧めしない。 >その隣のセルに「お疲れ様です」と入力される セル(隣の列の同行セルか?)を、普通はこんなことに使わない。 本当は、「お疲れ様です」ではなく、何か意味のある文字列や数をいれたいのか。それを隠したいのか。 こういう例の挙げ方は、感心しない。エクセルのシートは対話性などゲームじゃないので、あまり便利なものじゃない。どちらかと言えばビジネス用途。 MsgBoxででも、何か文字列(お疲れさま)や数値を出したいなら、たやすい。  しかしボックスの位置指定や、サイズ指定が簡単な方法で、許されていないようだ。文字列の縦書きもむつかしい。 ーー 参考 WEBに下記のような、POPUPなるものを見つけたので参考に。 3秒経つと消える。  決してVBAの初心者が使う方法とされるものではない。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row >= 1 And Target.Row <= 10 Then c = MsgBox("お疲れさんでした。続けますか?", vbYesNo + vbQuestion) If c = vbYes Then MsgBox "続けます" ElseIf c = vbNo Then Set WSH = CreateObject("WScript.Shell") WSH.Popup "終わります", 3 Set WSH = Nothing End If End If End Sub >C5~10行目を縦に結合し、文字を縦書きにする。 これもセルの結合はVBAでもやさしいが、縦書きにせねばならず、普通ではない。 C5でそうなって、C7で入力されたら、「お疲れ」の表示はもともままか? == セル結合は、VBAでデータ処理するとき、非常に障害になる。 極力、項目見出しなど以外では、やめておくべきだ。初心者がよくやる、見てくれ重視のために、後の処理に障害になる。

TaikooniQ1
質問者

お礼

ありがとうございます。 自分では勉強不足と わかりましたので できれば他の方法をもっと模索します。

その他の回答 (2)

  • kon555
  • ベストアンサー率51% (1845/3565)
回答No.3

>>B5セルに何か入力があれば  こうした「もし~~なら」という条件付けはif構文で可能です。張られているコードでも使用されているので、多分このコードはどここから拾ってきたものですね?  便利ですし、vbaの基本なので覚えましょう。 「B5セルに何か入力があれば」 この部分は以下のように記述します if Range("B5") <> "" Then 「C5セルに『お疲れ様です』」  Range("C5") = "お疲れ様です" このコードを入れる際は、頭をスペースなりタブなりで一段落とします。 こうする事で、if~~の条件に適合した場合に実行する、という形になります。 「C5~10行目を縦に結合」 結合はMergeで指定すればできます。ここも条件一致時の処理なので、一段落とします。  Range("C5:C10").Merge 「文字を縦書きにする」 縦書きにするのはセルを指定した後で『.Orientation = xlVertical』と指定します。  Range("C5").Orientation = xlVertical 最後に条件処理の終わりを示すコードを入れます。これは頭落としなしです。 End If つなげると以下のようになります。 if Range("B5") <> "" Then  Range("C5") = "お疲れ様です"  Range("C5:C10").Merge  Range("C5").Orientation = xlVertical End If セル位置の指定を替えたい場合は書き換えて下さい。ただこのままだと応用が利かないので、RangeではなくCellsにした方がいいでしょうが、その辺りはちょっと調べればすぐにわかると思います。

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

> C5~10行目を縦に結合し、文字を縦書きにする。 その操作をマクロの記録で記録したコードを参考にしてください。

関連するQ&A

専門家に質問してみよう