ExcelマクロVBAサンプル集 | 方眼紙Excelが楽に入力できるVBA | Excelマクロの実用サンプル、エクセルVBA集と解説



最終更新日:2016-11-05

方眼紙Excelが楽に入力できるVBA

もはや、「いじめ」か「いたずら」、

方眼紙Excelに、1枠1文字を入れろと言われて、悪戦苦闘・・・

マクロ書けば、こんな「いじめ」も「いたずら」も、サクッと克服できます。

以下のような、セル結合の鬼と化したExcelに、
罫線で囲んだ枠内に、1枠1文字で入れるという苦行を、マクロならサクッと解決できます。


方眼紙Excelのサンプル


2行2列をセル結合して、1枠にしています。


マクロVBAのコード

シートモジュールに、以下を全部貼り付けて下さい。
Option Explicit

'Changeイベント
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim sRng As Range '開始セル
  Dim cRng As Range '処理中セル
  Dim nRng As Range '次のセル
  Dim strIn As String '入力文字
  '入力された先頭セルに限定
  Set sRng = Target.Item(1)
  '空欄なら無視
  If IsEmpty(sRng) Then
    Exit Sub
  End If
  '結合範囲を取得
  Set cRng = sRng.MergeArea
  '入力文字
  strIn = sRng.Value
  'イベント停止
  Application.EnableEvents = False
  '文字を全て配置したか、方眼紙の枠がなくなるまで
  Do
    '文字を全て配置が終わった
    If Len(strIn) = 0 Then
      Exit Do
    End If
    '次の方眼紙の枠を取得、無ければ残りの文字を入れる
    Set nRng = getNext(cRng)
    If nRng Is Nothing Then
      cRng.Value = strIn
      Exit Do
    End If
    '左の1文字を入れる
    cRng.Value = Left(strIn, 1)
    '文字を2文字目からに
    strIn = Mid(strIn, 2)
    '次の方眼紙の枠のセルを次のセルに
    Set cRng = nRng
  Loop
  'イベント再開
  Application.EnableEvents = True
End Sub
'方眼紙の枠のセルか判定
Private Function isGraph(ByVal rng As Range) As Boolean
  '四隅に罫線が引かれている場合に、方眼紙の枠と判定
  If rng.Borders(xlEdgeTop).LineStyle <> xlNone And _
    rng.Borders(xlEdgeBottom).LineStyle <> xlNone And _
    rng.Borders(xlEdgeLeft).LineStyle <> xlNone And _
    rng.Borders(xlEdgeRight).LineStyle <> xlNone Then
    isGraph = True
  Else
    isGraph = False
  End If
End Function
'次の方眼紙の枠を取得
Private Function getNext(ByVal cRng As Range) As Range
  Dim rng As Range
  Dim nRng As Range
  '右のセルが方眼紙の枠なら、それを設定
  If isGraph(cRng.Offset(, 1).MergeArea) = True Then
    Set getNext = cRng.Offset(, 1)
    Exit Function
  End If
  '右のセルが方眼紙の枠以外の時は、下のセルを判定
  Set rng = cRng.Offset(1).MergeArea
  '下のセルが方眼紙の枠でなければ終わり
  If isGraph(rng) = False Then
    Set getNext = Nothing
    Exit Function
  End If
  '左に向かって先頭列の方眼紙の枠を探す
  Do
    'A列なら終わり
    If rng.Column = 1 Then
      Set getNext = rng
      Exit Function
    End If
    '左が方眼紙の枠でなければ終わり
    If isGraph(rng.Offset(, -1).MergeArea) = False Then
      Set getNext = rng
      Exit Function
    End If
    '次の行の先頭の方眼紙の枠セル
    Set rng = rng.Offset(, -1).MergeArea
  Loop
End Function

コードの解説は、コメントに入れてありますので参考にしてください。
気を付けるべき点は、
常に、.MergeAreaでRangeを指定することと、
次のセルに進む時には、.Offsetを使うということです。
.Offsetを使えば、結合セルの次が簡単に取得できます。
Cellsで行・列指定していたら、かなり大変なコードになってしまいます。


入力開始セルを選択して、文字を全部入れて下さい。
どこから書き始めても、ちゃんと次の行にもすすんで、1枠1文字になります。
ただし、以下の制限があります。

制限事項

・方眼紙の枠の判定は、上下左右に罫線が引かれていること
・複数行(多段)の場合は、列の凸凹にならないように、全行が同列数にしてください。
・文字が入りきらない場合は、最後のセルに残りの文字を全て入れます。


入力した結果

先頭セルに、



「もはや、「いじめ」か「いたずら」、方眼紙Excelに、1枠1文字を入れろと言われて、悪戦苦闘・・・」
と入れると、



最後は、はいりきらないので、・・が1枠に入っています。


ここに掲載したものは、あくまでサンプルですので、
複雑な形(列数が違うとか、途中から別項目になっているとか)であれば、
さらにマクロVBAの記述を追加していくことになります。
また、
分割された文字を、簡単にまとめたい場合もあるでしょう。
分割よりは結合する方が簡単なので、チャレンジしてみて下さい。
要点は、次のセルを見つける部分です。
Function getNext
ここを工夫すれば、複雑なパターンにもある程度は対応できるVBAを作ることが出来ます。




同じテーマ「ExcelマクロVBAサンプル集」の記事

ブックを開いた時に指定シートを表示(Workbook_Open)
ブックが閉じられる直前に保存済を確認(Workbook_BeforeClose)
シートが選択された時に指定セルに移動(Worksheet_Activate)
ダブルクリックで行高・列幅調整(Worksheet_BeforeDoubleClick)
英小文字が入力されたら大文字に変換(Worksheet_Change)
セル選択で選択行の色を変更(Worksheet_SelectionChange)

新着記事 ・・・新着記事一覧を見る

メモの挿入・削除と改行文字|Google Apps Script入門(12月6日)
リンクの挿入・編集・削除|Google Apps Script入門(12月6日)
セルに数式を入れる|Google Apps Script入門(12月1日)
セルのコピー&各種ペースト|Google Apps Script入門(11月22日)
Twitter Bot 作成|Google Apps Script応用(11月6日)
Excel流の最終行の取得|Google Apps Script応用(11月6日)
方眼紙Excelが楽に入力できるVBA|ExcelマクロVBAサンプル集(11月5日)
「ポケモンを確実に見つける方法」をExcelで数学してみた|エクセル雑感(11月4日)
スプレッドシート(ブック)の作成・名前変更|Google Apps Script入門(11月4日)
シートの挿入・削除・名前変更|Google Apps Script入門(11月3日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.CSVの読み込み方法|ExcelマクロVBAサンプル集
8.変数とデータ型(Dim)|ExcelマクロVBA入門
9.セル・行・列の削除・挿入(Delete,Insert)|ExcelマクロVBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • 方眼紙Excelが楽に入力できるVBA

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。



    ↑ PAGE TOP