ExcelVBAのLineInput取得値の置換等

このQ&Aのポイント
  • ExcelのVBAでLine Inputで取得した内容について、いくつかの処理を行いたいのですが記述が分かりません。
  • 質問内容は、ExcelのVBAでLine Inputを使用して取得した値に対して、指定の処理を行いたいが、具体的な記述方法が分からないというものです。
  • 質問者は、ExcelのVBAでLine Inputで取得した値を処理し、特定の条件に基づいて書き換えたいと思っています。しかし、具体的な処理の記述方法について知識がありません。
回答を見る
  • ベストアンサー

ExcelVBAのLineInput取得値の置換等

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の先頭に"都道府県名エラー"と加える 全て別々の処理として教えて頂きたく思います。 分かる部分だけで構いませんので、どうぞ宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答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

その他の回答 (3)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

変換ロジックとチェックロジックとあるので分ける。チェックなんてのは答は出るでしょう。 いかに効率よく変換、整形するか。 今ある機能要件をプログラムレベルのロジックに砕いて下さい。 それができてからコードを書く。 コードを書いて要件が合わないから書き直し、は時間の無駄になりかねない。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

バイト数をLENで求め、FOR文で繰り返しで間のスペースはとれる。関数化とか。 UCASEとか大文字小文字扱う関数はみておく。 数字置き換えは10文字、10ケースしかない。 TABや全角スペースを一旦半角スペースにして半角スペースがいくつか並んだところを1つにするのがよさそう。 処理順番は工夫です。

関連するQ&A

  • EXCELVBA 文字の判別

    excelVBAで困っていることがあります。 あるセルに入っているデータの先頭の文字より半角数字5桁の数字を取得する処理を作っています。 先頭5文字をmid関数で取得すれば、簡単だと思っていたのですが、 データを見てみたところ、以下のようなデータがあることがわかりました。 (例)20-500(半角-),20―500(ダッシュ),20500(全角) 20 500(半角スペース),20 500(全角スペース),205(桁落ち),2050あ(全角文字付き) 5桁の数字が取得できると思われる箇所は 半角5桁で取得しなければいけません。 また、正しいデータは半角数字5桁だよ、 ということをユーザに知らせるため、半角数字5桁のデータ以外は それぞれ半角-は赤、ダッシュは青等セルの色を変更する必要があって困っています。 ご教授ください。よろしくお願いいたします。

  • ハイフンだけ置換したい。

    全角ハイフンと、全角の「ー」(長音符)を、半角ハイフンに 置換したいと思っています。 対象の文字列は、住所を想定しているので、 たとえばですが 「ワンダービル1ー2ー3」だったら、「ワンダービル」は長音符の ままで、数字の間だけハイフン変換したいのです。 (英数については事前に半角への変換をかけています) 単純にreplaceではワンダービルがワンダービルになるので、 困っています。 何か良い案がありましたら、ご教授ください。

  • Excelでの置換の仕方

    昨日もこちらでお世話になり、問題が解決いたしました。 そしてそこで疑問がまた浮上してきました。データーで数字の全角と半角の物が混ざっているので、データーの処理上、半角に統一をしたいと思っています。昨日いただいた回答の中に「事前に「置換」でスペースを削除し、=ASC(A1)等で半角」とアドバイスがありました。 しかしどのように使用していいのか分かりません。 「編集」→「置換」そして検索する文字列とか置換後の文字列とかいろいろと選ぶ項目があると思うのですが、そこからが分かりません。 どうかアドバイスをよろしくお願いいたします。

  • 半角全角スペースの削除(先頭&末尾)

    やまとです。 ある文字列の先頭と末尾のスペースを取り除きたいのですが、 どのようにしたら良いでしょうか? 事前に試した事が2つあります。 1.trim を使用する。  $aiueo = " あいうえ お "; $aiueo = trim($aiueo));  とすると、スペースが削除されます。  しかし、これでは全角のスペースが削除されないようですね。 2.置換する。  $aiueo = " あいうえ お ";  $aiueo = str_replace( ' ', '', $aiueo );  とすると、全角のスペースが削除されます。  しかし、文字列の先頭と、末尾以外の全角スペースも削除されてしまう  ようですね。 では、文字列の先頭と末尾の半角スペースと全角スペースを削除したい場合は どのようにしたら良いでしょうか? ご教授願います。

    • ベストアンサー
    • PHP
  • 先頭 中央 末尾 スぺースチェック

    ある文字列の先頭と末尾の全角スペースを削除し、文字列の途中での(全角または半角)スペースは1つだけ残る(複数入った場合)のチェックはどうしたら要いいでしょうか? ご教授願います。

  • ワードのワイルドカードを使った置換について

    ワードでワイルドカードを使って置換をしたいのですが、うまくいきません。 数字の前の全角スペースを半角スペースに変えたいのです。 置換でワイルドカードを使用するにチェックを入れ、 検索する文字列は「全角スペース[0-9]」 置換後の文字列は「半角スペース\1」 として実行してみたのですが、 〔置換後の文字列〕に指定できない範囲の番号が含まれています というメッセージが出ます。 全角スペース[0-9]はきちんと認識しているようで、検索まではうまくいっているようですが、 置換後の指定の仕方が悪いようなのです。 お教えいただければと思います。 よろしくお願いいたします。

  • エクセルで、【スペース除き】【半角⇒全角へ】

    タイトルの件、質問します。 A1セルに、下記のように、全角と半角の文字数字及び、スペースが入っています。 これを ・全角のみ ・半角文字、半角スペース 削除 を出来ないでしょうか? あいうえお12345 アイウエオ 12345

  • 正規表現で5文字切抜き

    正規表現で5文字切抜き 正規表現について悩んでいます。秀丸エディタで正規表現を使いたいと思っています。 各行に任意の文字列(スペース、ハイフン、カンマ、アンダーバー、半角全角英数等含む)があります。 先頭行から5文字を残して残りは削除したいと思います。 5文字以下はそのまま残したいと思います。 例) aaaaabb⇒aaaaa ab cdef⇒ab cd a ⇒ a aa⇒aa 「^.{1,5}」とやると、先頭から5文字選択できるのはわかります。 「^.{1,5}(?=.+)」とやっても選択できるのはわかります。 ただし、6文字以上は削除とした場合、どのように正規表現を組み立てればよいでしょうか?

  • エクセルの入力、全角半角について教えて下さい。

    このたび、仕事で住所録を入力することになりました。数千件あります。フォーマットは決まっています。例えば番地「1-2-3」があるとします。あるところには数字は半角入力、ハイフンは全角入力となります。またあるところにはすべて全角で入力となります。初心者なので数字は半角で入力していますが、ハイフンは自信がなく「ほ」のキーを打ち込んだ後、スペースキーで変換しています。そして、また数字を打って「ほ」と打ってスペースで変換しています。このような入力方法だととても時間がかかってしまいます。もっと時間短縮な打ち方があれば教えて下さい。宜しくお願いします。

  • 一太郎:全角ハイフンの出し方

    こんにちは。 一太郎で全角のハイフンを出したいのですが、 どうしたらいいのでしょうか? 半角は出せるのですが、全角が上手く だせないのです。 半角だと「-」という小さいものになってしまいます。 キーの左上の「=」や「ほ」のあるキーを押すと でるのかなと思ったのですが、「ー」がでてしまいます。 「-」が全角ハイフンなのですが、数字の後に 上記の「=」や「ほ」のあるキーを押すと ではします。しかし、数字の後でなくても最初から この全角ハイフンを出したいのです。 どなた様か宜しくお願いいたします。

専門家に質問してみよう