TopProgramming LanguageVB/VBA > 2014年8月
2014年8月14日

Excel VBAで改行する方法のまとめ

August 14,2014 12:55 AM
Tag:[, ]
Permalink

Excel VBAで改行する方法をまとめました。

1.問題点

次の、A2セルの内容をA1セルにコピーするプログラムを書いてみました。

Sub test()
    Worksheets("Sheet1").Cells(1, 1).Value = Worksheets("Sheet1").Cells(2, 1).Value
End Sub

実際の表示
実際の表示

2行目がちょっと横に長いので「=」の直後で改行して、

Sub test()
    Worksheets("Sheet1").Cells(1, 1).Value =
        Worksheets("Sheet1").Cells(2, 1).Value
End Sub

としようとしたところ、「コンパイル エラー:修正候補: 式」というエラーが発生しました。

コンパイル エラー:修正候補: 式

改行したときにこのエラーを回避する方法がわかりません。

2.VBAで改行する

VBAで改行するには、改行する行の行末に「_」を記述します。「_」の直前には半角スペースが必要です。この半角スペースとアンダースコアの組み合わせを「改行文字(行継続文字)」と呼ぶようです。

Sub test()
    Worksheets("Sheet1").Cells(1, 1).Value = _
        Worksheets("Sheet1").Cells(2, 1).Value
End Sub

実際の表示
実際の表示

改行文字は複数挿入することができます。

Sub test()
    Msgbox "foo" & _
           "bar" & _
           "hoge" & _
           "fuga"
End Sub

上のコードを実行すると次のようなメッセージが表示されます。

メッセージ

3.改行文字を挿入できる箇所

改行文字を挿入できるのは、プログラムとして連結していなくてもよいところです。

具体的には次のとおりです(すべてではありません)。

  • カンマの前後
  • カッコの前後
  • 演算子の前後
  • 修飾子文字「.」 の前後

たとえば、冒頭のサンプルは次のように改行することが可能です。

Sub test()
  Worksheets _
    ( _
      "Sheet1" _
        ) _
          . _
            Cells _
              ( _
                1, _
                  1 _
                    ) _
                      . _
                        Value _
                          = _
  Worksheets _
    ( _
      "Sheet1" _
        ) _
          . _
            Cells _
              ( _
                2 _
                  , _
                    1 _
                      ) _
                        .Value
End Sub

変数名の途中や文字列の途中で改行することはできません。

4.改行文字の制限

改行文字を一つの関数で24以上利用すると「行継続文字(_)を使いすぎています。」というエラーが発生するようです。

エラーメッセージ

改行文字を増やせる方法はないようなので、適切に使うことを推奨します。

Comments [0] | Trackbacks [0]
2014年8月12日

VBAのテキストボックスに特定の文字だけを入力できるようにする方法

August 12,2014 2:34 AM
Tag:[, ]
Permalink

VBAのテキストボックスに特定の文字だけを入力できるようにする方法を紹介します。

1.問題点

Excelシートにテキストボックスを表示させるには、「開発」タブをクリックして「挿入」→「テキストボックス」を選択します。

「開発」タブ

これでテキストボックスが表示されました。

テキストボックス

このテキストボックスには任意の文字が入力できます。

テキストボックス

このテキストボックスに特定の文字だけを入力できるようにしたい、たとえば数字だけを入力できるようにしたいのですが、その方法がわかりません。

2.特定の文字だけを入力できるようにする

特定の文字だけを入力できるようにするには、Alt+F11でVBEを開き、左のツリーからテキストボックスを表示させているシート名をダブルクリック。

VBE

右ペインの「(General)」というプルダウンから「TextBox1」を選択(複数のテキストボックスを作っている場合、「TextBox1」の数字の部分は変わります)。このあと「Private Sub TextBox1_Change()~End Sub」というコードが表示されますが無視してください。

General

カーソルをさきほど表示されたコードの直前か直後に移動したあと、右側のプルダウンから「KeyPress」を選択。

KeyPress

これで次のコードが表示されます。

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 
End Sub

数字だけを入力できるようにするには、上記のコードに赤色部分を追加します。

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii < 48 Or KeyAscii > 57 Then
        KeyAscii = 0
    End If
End Sub

これでテキストボックスに数字以外の文字が入力できなくなります。

テキストボックス

3.解説

TextBox1_KeyPress()という関数(イベントプロシージャ)はキーが押されたときに起動する関数です。

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

この関数の引数KeyAsciiは、押されたキーのアスキーコードになります。

この引数を判定し、数字以外の文字、つまりアスキーコードが48~57の範囲であれば変数KeyAsciiに0を設定することで、キー入力を無効にすることができます。

4.ASCIIコード一覧

ASCIIコードを調べるには、Googleで「ASCIIコード」で調べればよいでしょう。

とりあえず以下のページを紹介しておきます。

ASCII文字コード

ASCIIコードの見方がよくわからない場合、さきほどのコードを次のように修正して、入力文字のASCIIコードを調べてもよいでしょう。

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    MsgBox KeyAscii
End Sub
Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3