パソコン悪戦苦闘記録

アポストロフィー付きデータをExcelマクロで自動計算~データ型変換

 データベースシステムからエクスポートしたデータを、表計算ソフトExcelで開くと、各データの先頭に「'」(アポストロフィー)がくっ付いていることがあります。
 これは、データベースによくある仕様です。私の会社の業務系システムも、そのような仕様になっています。

 このデータ先頭に付いているアポストロフィーは、いったい何者なのか?
 それは、データを文字列型とする働きをする書式設定制御文字です。ですから、データがたとえ数字であっても、アポストロフィーがくっ付いたままでは、足し算、引き算、合計などの計算ができません。数値ではなく、文字列となっているからです。

 以上の詳細は
  こちらの記事をご覧ください。

 
 アポストロフィー付きデータでも、計算できるようにする対処策は、いくつかあります。
 
 ただ、毎回毎回、手作業でやるのは面倒なので、Excelマクロ(VBA)で自動実行する方法を思いつきました。
 「データ型変換」という方法です。
 具体的には、「CInt」関数や、「CLng」関数を使います。
 これらの関数によって、データの型が「文字列」型から「整数型」や「長整数型」に、つまり数値に変換されます。よって、アポストロフィー付きデータであっても、計算が可能となります。

 例えば、次のようなデータがあったとします。
 このデータから、山口さんの合計を求めたい場合です。

1  '野口  '54923
2  '山口  '99232
3  '野口  '20939
4  '西城  '80003
5  '桜田  '89923
6  '山口  '23497
7  '西城  '56700
8  '野口  '23981
9  '山口  '43998

 通常のデータ(アポストロフィーのない場合)だと、次のVBAコードで、合計を求めることができます。

Dim i As Integer
Dim myKK As Long
myKK = 0
For i = 1 To 9
  If Cells(i, 2).Value = "山口" Then
    myKK = myKK + Cells(i, 3).Value
  End If
Next i
MsgBox "山口合計は" & myKK

 ところが、データにアポストロフィーが付いているために、上記コードでは計算をしてくれません。

 そこで、どうするか。
 「CLng」関数を使います。
上記コード中の、Cells(i, 3)データを、「CLng」関数を使って数値に変換します。
  CLng(Cells(i, 3).Value)
と、すればOKです。


 修正版コードは、次のとおりとなります。

Dim i As Integer
Dim myKK As Long
myKK = 0
For i = 1 To 9
  If Cells(i, 2).Value = "山口" Then
    myKK = myKK + CLng(Cells(i, 3).Value)
  End If
Next i
MsgBox "山口合計は" & myKK

 このコードだと、まともに動きます。手作業は不要で、クリック一つで自動計算してくれます。





補足1
 アポストロフィー付きデータによる条件分岐

 「山口」というデータの頭に「'」(アポストロフィー)が付いているので、
If Cells(i, 2).Value Like "*山口" Then
と記述すべき気がします。
 もちろん、これでも動きます。
 けれども、
  If Cells(i, 2).Value = "山口" Then
というコードでも、正常に動いてくれます。
 このことからも、データ先頭のアポストロフィーは、通常の文字ではないことが分かります。

補足2
 「CInt」と「CLng」のどちらを使うべきか。
 
 扱う数値の範囲によって、使い分ける、というのが一応の答えです。
 つまり、-32,768~32,767の範囲の数値であれば、「CInt」
 -2,147,483,648~2,147,483,647の範囲の数値であれば、「CLng」
です。
 そうすると、今回のブログ記事のデータ例では、「CInt」を使用するのが原則です。
 けど、「CLng」でも支障ありません。



それでは、また次の記事で
goosyun
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「VBAプログラミング・マクロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事