エクセル小僧:別のエクセルファイルから文字列をコピーするマクロ【解説編1】 [コンピューター]
別のエクセルファイル(以下、ワークブックと呼ぶ)から、文字列をコピーしてくるマクロのコード解説をします。
ワークシート側の設定については、
http://blog.so-net.ne.jp/cheese999/2012-12-23
を参照して下さい。
マクロのコードについては、
http://cheese999.blog.so-net.ne.jp/2012-12-24
http://cheese999.blog.so-net.ne.jp/2012-12-25
を参照して下さい。
【解説:文字列からスペースを削除する関数】
01:Function UFDelSP1(Str1 As String, Mode1 As Integer) As String
02: ' 【機能】文字列からスペースを削除
03: ' 【引数】
04: ' Str1 : 文字列(例:" 10. 2. 1. 2")
05: ' Mode1 : モード
06: ' (2^0)=1 : 半角スペースを削除
07: ' (2^1)=1 : 全角スペースを削除
08: ' 【変数】
09: Dim DelChr1 As Variant ' 削除する文字
10: Dim Str2 As String ' 文字列
11: Dim myMode2(1) As Integer ' モード
12: Dim i As Integer ' 整数
13: ' 【コード】
14: DelChr1 = Array(" ", " ") ' 削除する文字
15: Str2 = Str1
16: For i = 0 To 1
17: If Int(Mode1 / (2 ^ i)) Mod 2 = 1 Then
18: Str2 = Replace(Str2, DelChr1(i), "") ' DelChr1(i)を削除
19: End If
20: Next i
21: UFDelSP1 = Str2
22:End Function
文字列からスペースを削除するために、Replace()という関数を使います。
この関数は、Replace(元の文字列, 検索する文字列, 変換後の文字列)と設定して
使います。元の文字列からスペースを削除するためには、
Replace(元の文字列, " ", "")のようにして使います。
今回、半角スペースと全角スペースの両方、もしくは、片方を削除したいので、
Mode1という整数の引数に2つの意味を持たせることにします。2の0乗ビットが1
だったら、半角スペースを削除し、2の1乗ビットが1だったら、全角スペースを
削除することにします。
Mode1=(2^0) * 0 + (2^1) * 0 = 0 + 0 = 0 :何も削除しない
Mode1=(2^0) * 1 + (2^1) * 0 = 1 + 0 = 1 :半角スペースを削除する
Mode1=(2^0) * 0 + (2^1) * 1 = 0 + 2 = 2 :全角スペースを削除する
Mode1=(2^0) * 1 + (2^1) * 1 = 1 + 2 = 3 :半角、全角スペースを削除する
For文による繰り返しで処理するため、半角スペースと全角スペースをDelChr1という
Variant型変数にArray()で配列として代入します。(14行目)
16-20行目のFor文では、i=0の時に半角スペース、i=1の時に全角スペースを
Mode1の値によって、削除したり、しなかったりします。
Mode1の各ビットが1かどうかは、次の計算で求められます。
2の0乗ビット = Int(Mode1 / (2^0)) Mod 2
2の1乗ビット = Int(Mode1 / (2^1)) Mod 2
この計算をマクロの17行目で実行し、ビットが1の場合、18行目のReplace()で
文字列中のスペース(半角 or 全角)を空文字列に変換します。
--------------------------------------------------------------------------------------------------------------
FUJIFILM X10の値下げが続いています。
新型は1月7日に発表???
福島のこと、好きにならなくてもいいんです。
忘れてくれなければ。。
富岡のライブカメラが無くなってしまっています。。
猪苗代湖ズ / I love you & I need you ふくしま [MORE ACTION, MORE HOPE]
ワークシート側の設定については、
http://blog.so-net.ne.jp/cheese999/2012-12-23
を参照して下さい。
マクロのコードについては、
http://cheese999.blog.so-net.ne.jp/2012-12-24
http://cheese999.blog.so-net.ne.jp/2012-12-25
を参照して下さい。
【解説:文字列からスペースを削除する関数】
01:Function UFDelSP1(Str1 As String, Mode1 As Integer) As String
02: ' 【機能】文字列からスペースを削除
03: ' 【引数】
04: ' Str1 : 文字列(例:" 10. 2. 1. 2")
05: ' Mode1 : モード
06: ' (2^0)=1 : 半角スペースを削除
07: ' (2^1)=1 : 全角スペースを削除
08: ' 【変数】
09: Dim DelChr1 As Variant ' 削除する文字
10: Dim Str2 As String ' 文字列
11: Dim myMode2(1) As Integer ' モード
12: Dim i As Integer ' 整数
13: ' 【コード】
14: DelChr1 = Array(" ", " ") ' 削除する文字
15: Str2 = Str1
16: For i = 0 To 1
17: If Int(Mode1 / (2 ^ i)) Mod 2 = 1 Then
18: Str2 = Replace(Str2, DelChr1(i), "") ' DelChr1(i)を削除
19: End If
20: Next i
21: UFDelSP1 = Str2
22:End Function
文字列からスペースを削除するために、Replace()という関数を使います。
この関数は、Replace(元の文字列, 検索する文字列, 変換後の文字列)と設定して
使います。元の文字列からスペースを削除するためには、
Replace(元の文字列, " ", "")のようにして使います。
今回、半角スペースと全角スペースの両方、もしくは、片方を削除したいので、
Mode1という整数の引数に2つの意味を持たせることにします。2の0乗ビットが1
だったら、半角スペースを削除し、2の1乗ビットが1だったら、全角スペースを
削除することにします。
Mode1=(2^0) * 0 + (2^1) * 0 = 0 + 0 = 0 :何も削除しない
Mode1=(2^0) * 1 + (2^1) * 0 = 1 + 0 = 1 :半角スペースを削除する
Mode1=(2^0) * 0 + (2^1) * 1 = 0 + 2 = 2 :全角スペースを削除する
Mode1=(2^0) * 1 + (2^1) * 1 = 1 + 2 = 3 :半角、全角スペースを削除する
For文による繰り返しで処理するため、半角スペースと全角スペースをDelChr1という
Variant型変数にArray()で配列として代入します。(14行目)
16-20行目のFor文では、i=0の時に半角スペース、i=1の時に全角スペースを
Mode1の値によって、削除したり、しなかったりします。
Mode1の各ビットが1かどうかは、次の計算で求められます。
2の0乗ビット = Int(Mode1 / (2^0)) Mod 2
2の1乗ビット = Int(Mode1 / (2^1)) Mod 2
この計算をマクロの17行目で実行し、ビットが1の場合、18行目のReplace()で
文字列中のスペース(半角 or 全角)を空文字列に変換します。
--------------------------------------------------------------------------------------------------------------
FUJIFILM X10の値下げが続いています。
新型は1月7日に発表???
FUJIFILM デジタルカメラ X10 1200万画素 2/3型EXR-CMOS F FX-X10
- 出版社/メーカー: 富士フイルム
- メディア: エレクトロニクス
福島のこと、好きにならなくてもいいんです。
忘れてくれなければ。。
富岡のライブカメラが無くなってしまっています。。
猪苗代湖ズ / I love you & I need you ふくしま [MORE ACTION, MORE HOPE]
今年もよろしくです(^O^)/
by DEBDYLAN (2013-01-03 07:56)
nice! ありがとうございます。
(^_♡)ノ
DEBDYLANさん、
いつもありがとうございます。
(^_♡)ノ
by cheese999 (2013-01-03 20:51)