
ExcelのVBAでLine Inputで取得した内容について、
いくつかの処理を行いたいのですが記述が分かりません。
どうか教えて頂きたく思います。
Sub test()
Dim buf As String
Open "D:\test.txt" For Input As #1
Do Until EOF(1)
Line Input #1, buf
「ここに入る処理の記述」
Loop
Close #1
End Sub
知りたい記述の処理内容
Bufの中を先頭から1文字1文字確認して…
1.もしBufの先頭と行末にスペースがあれば、スペースを削除(全角・半角・タブを対象)
2.もしBufに2文字以上の連続スペースがあれば、それが1文字になるまで削除(1文字だけは残す)
3.もしBufに半角英大文字があれば半角英小文字にする(または半角英小文字を半角英大文字にする)
4.もしBufに全角数字があれば、半角数字に置換する
5.もしBufに全角漢字(都道府県市区町村名等)しか無かった場合、特定の文字の後に全角スペースを入れる(県と市)
6.もしBufに数字の後に続く半角ハイフンがあった場合(2-5-301号室等)ハイフンを全角にする
7.もしBufに"郵便番号"或いは"〒"の文字があった場合、該当する文字のみを削除
8.もしBufに"東京都""沖縄県""大阪府""北海道""福岡県"以外の文字があった場合、該当する文字以外を削除
9..もしBufが47都道府県以外の文字で始まった場合、Bufの先頭に"都道府県名エラー"と加える
全て別々の処理として教えて頂きたく思います。
分かる部分だけで構いませんので、どうぞ宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
思いつくまま作って見ました。
住所録等で使用するのでしたら市町村名など、色々と考慮すべき事があるはずですがそれらはまったく考えていませんので注意して使ってください。
【A1】
buf = " abcde "
sAns1 = LTrim(RTrim(buf)) '「abcde」
【A2】正規表現を使用
Dim oRegExp As Object
Set oRegExp = CreateObject("VBScript.RegExp")
buf = "a b c de "
With oRegExp
.Global = True
.Pattern = "\s+"
sAns2 = .Replace(buf, " ") '「a b c de」
End With
【A3】半角だけってのが難しい。半角・全角全て小文字化なら
buf = "aBCde "
sAns3 = StrConv(buf, vbLowerCase) '「abcde」
'【A4】ループを回して置換
buf = "123 "
sAns4 = buf
For i = 0 To 9
sAns4 = Replace(sAns4, Chr(Asc("0") + i), Format(i, "0"))
Next i '「123」
'【A5】全角のみかをチェックしてから置換。でも、「市川市」とかどうするの?
buf = "あああ県いいい市うう町"
sChk = StrConv(buf, vbFromUnicode)
If Len(buf) * 2 = LenB(sChk) Then
sAns5 = Replace(buf, "県", "県 ")
sAns5 = Replace(sAns5, "市", "市 ")
End If '「あああ県 いいい市 うう町」
'【A6】例では全角ハイフンが半角と見分けづらいのでダッシュを使用
buf = "2-5-201号室等"
sAns6 = buf
For i = 0 To 9
sAns6 = Replace(sAns6, i & "-", i & "―")
Next i '「2―5―201号室等」
'【A7】
buf = "〒123-4567"
sAns7 = Replace(buf, "郵便番号","")
sAns7 = Replace(sAns7, "〒","")'「123-4567」
'【A8】正規表現を使用
Dim oRegExp As Object
Set oRegExp = CreateObject("VBScript.RegExp")
buf = "a福岡県aaa東京都港区沖縄県那覇市"
With oRegExp
.Pattern = "[^東京都|沖縄県|大阪府|北海道|福岡県]"
sAns8 = .Replace(buf, "") '「福岡県東京都沖縄県"」
End With
'【A9】正規表現を使用。(中略)の所には都道府県名をずらずらと登録のこと
Dim oRegExp As Object
Set oRegExp = CreateObject("VBScript.RegExp")
buf = "a青森県"
With oRegExp
.Pattern = "^[北海道|青森県|(中略)|沖縄県]"
sAns9 = buf
If .Match(buf) = False Then
sAns9 = "都道府県名エラー" & sAns9
End If '「都道府県名エラーa青森県」
End With
No.4
- 回答日時:
変換ロジックとチェックロジックとあるので分ける。
チェックなんてのは答は出るでしょう。いかに効率よく変換、整形するか。
今ある機能要件をプログラムレベルのロジックに砕いて下さい。
それができてからコードを書く。
コードを書いて要件が合わないから書き直し、は時間の無駄になりかねない。
No.2
- 回答日時:
うーん、質問内容としては、初歩的な内容も含まれていますから、そのレベルだと、おそらく、元のコード自体も修正したりできないのではないかと思います。
できるだけ、自分で調べて解決できる部分は、してほしいものです。1. Trim 関数とReplace関数で出来るような気がします。
a = " 123 "
a = Replace(a, Space(1), Space(1), , , 1) 'TextCompare モードで、半角スペースに置換
a = Replace(a, vbTab, Space(1), , , 1)
b = Trim(a)
2.
a = "12 345" 'すでに半角空白にしてあることが前提
Do
i = Len(a)
a = Replace(a, Space(2), Space(1))
j = Len(a)
Loop While i > j
3.初級レベル
a = "ABcDeF"
b = StrConv(a, vbLowerCase) '小文字, 大文字は、vbUpperCase
4.3に準じます。初級レベルにつき割愛
全角数字があれば、半角数字に置換する
vbNarrow
5.
a = "宮崎県宮崎市日出町"
If Not a Like "*[!一-龠]*" Then
a = Replace(a, "県", "県 ") '後ろに全角空白
a = Replace(a, "市", "市 ")
End If
b = a
6.初級レベル
a= Replace(a,"-","-") 'デフォルト・BinaryCompareモード
7.初級レベル
a = Replace(a,"郵便番号", "")
a = Replace(a,"〒", "")
8.
"東京都""沖縄県""大阪府""北海道""福岡県"以外の文字があった場合該当する文字以外を削除
質問の意味がよく理解できません。
例えば、「都内千代田区」「府内船場」
というようなことでしょうか。ただ、9番と論理矛盾、もしくは、兼ねているように思います。都内・府内という特定の単語を削除するというのは可能でも、不特定の単語を削除は文字の切れ目がありませんから、掲示板上で簡易に公開する方法はないと思います。
9.
Const PREFECT_LIST = "北海道,青森県,岩手県,秋田県,宮城県,山形県,福島県,新潟県,富山県,石川県,福井県, 長野県,茨城県, 栃木県, 群馬県, 埼玉県,千葉県, 神奈川県, 山梨県, 東京都,岐阜県,静岡県,愛知県,三重県," & _
"滋賀県,京都府,兵庫県,奈良県,和歌山県,大阪府,鳥取県,島根県,岡山県,広島県,山口県,徳島県,香川県,愛媛県,高知県, 福岡県, 佐賀県, 長崎県, 熊本県, 大分県, 宮崎県, 鹿児島県,沖縄県"
Prefects = Split(PREFECT_LIST, ",")
'
a = "千代田区丸の内"
For Each c In Prefects
If Not a Like c & "*" Then
flg = True
Exit For
End If
Next c
If flg Then
b = "都道府県名エラー!" & a
End If
No.1
- 回答日時:
バイト数をLENで求め、FOR文で繰り返しで間のスペースはとれる。
関数化とか。UCASEとか大文字小文字扱う関数はみておく。
数字置き換えは10文字、10ケースしかない。
TABや全角スペースを一旦半角スペースにして半角スペースがいくつか並んだところを1つにするのがよさそう。
処理順番は工夫です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 文字に半角が含まれて...
-
住宅にカナを入力する際に丁目...
-
IEからEdgeへの移行に伴うIMEの...
-
英数字のみ全角から半角に変換
-
エクセルの検索が正しくできな...
-
プログラミングでは、半角括弧...
-
エクセルにMicrosoft Barcode C...
-
エクセルでの”々”の扱い
-
全角英数字の必要性が理解できない
-
C言語のコンパイルエラーなん...
-
word差し込み印刷 半角カタカ...
-
Excelの中に全角ひらがな、漢字...
-
Accessで日付や数値を全角で表...
-
COBOL・全角判定
-
全角入力
-
文字コード変換時の文字化けに...
-
全角文字だけ抜き出したい
-
VBで、String型のデータが、...
-
全角/半角キーをSendkeys関数で...
-
VB.net、テキストボックス入力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
住宅にカナを入力する際に丁目...
-
英数字のみ全角から半角に変換
-
VBA 文字に半角が含まれて...
-
IEからEdgeへの移行に伴うIMEの...
-
全角英数字の必要性が理解できない
-
COBOL・全角判定
-
word差し込み印刷 半角カタカ...
-
VB.net、テキストボックス入力...
-
char型全角数字から、int型半角...
-
プログラミングでは、半角括弧...
-
メモ帳の段落の揃え方
-
エクセルにMicrosoft Barcode C...
-
エクセルの検索が正しくできな...
-
封筒の宛先で縦書きの書き方
-
エクセルでの”々”の扱い
-
全角/半角キーをSendkeys関数で...
-
.NET3.5におけるキーボードの「...
-
VBで、String型のデータが、...
-
Accessで日付や数値を全角で表...
-
明細書の英数字の全角・半角に...
おすすめ情報