Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7502 / 13644 ツリー ←次へ | 前へ→

【38762】文字列から漢字のみ取得 mam 06/6/9(金) 16:48 質問[未読]
【38763】Re:文字列から漢字のみ取得 Blue 06/6/9(金) 16:58 発言[未読]
【38773】Re:文字列から漢字のみ取得 mam 06/6/9(金) 18:38 お礼[未読]
【38774】Re:文字列から漢字のみ取得 Blue 06/6/9(金) 20:03 回答[未読]
【38776】Re:文字列から漢字のみ取得 mam 06/6/9(金) 20:53 お礼[未読]

【38762】文字列から漢字のみ取得
質問  mam  - 06/6/9(金) 16:48 -

引用なし
パスワード
   いつもお世話になっています。
題名のままなのですが、自分ではどうやればいいのか、
皆目検討がつきません。
何卒、よろしくお願いします。

具体的には、ブック名の中に漢字が含まれていて、
それだけをピックアップしたいと思っています。
ブック名の構成は、英数字、カナ、()の全角、半角あり、漢字です。
ブックは指定フォルダ内に複数あり、順次読込んでいきます。
読込んだブック名の中に含まれる「漢字」でデータの貼付位置(行)を判断。

【38763】Re:文字列から漢字のみ取得
発言  Blue  - 06/6/9(金) 16:58 -

引用なし
パスワード
   なんだかよくワカリマセンが、RegExpオブジェクト(正規表現)を使う方法です。

Sub sample()
  Dim objMatchs As Object
  Dim objMatch As Object
  Dim strTarget As String
  
  strTarget = "A.漢字が在ります(終)"
  With CreateObject("VBScript.RegExp")
    .Pattern = "([一-龠])" ' これで漢字1文字に該当
    .Global = True
    Set objMatchs = .Execute(strTarget)
    For Each objMatch In objMatchs
      Debug.Print objMatch.FirstIndex & "文字目:"; objMatch.Value
    Next
  End With
End Sub

【38773】Re:文字列から漢字のみ取得
お礼  mam  - 06/6/9(金) 18:38 -

引用なし
パスワード
   ▼Blue さん:

 早々のご返信ありがとうございます。
 ご掲示頂いた、コードを実行してみました。一文字ずつ漢字の
抜き取り(読み取り?)が出来ています。
ここから先を検討する前に、私まだまだ弱輩者ですので、
コードの解析からがんばります。

 説明が下手ですみません。
 これからはこの一文字ずつを連結させて文字列にして、条件判断の
元データとします。

 今更ですが、
 ex:ブック名
    (1G)鈴木ファイル.xls → 鈴木  のみ抽出
    (2G)佐々木ファイル1.xls  → 佐々木 のみ抽出
    (3G)岡ファイル.xls     → 岡   のみ抽出


>なんだかよくワカリマセンが、RegExpオブジェクト(正規表現)を使う方法です。
>
>Sub sample()
>  Dim objMatchs As Object
>  Dim objMatch As Object
>  Dim strTarget As String
>  
>  strTarget = "A.漢字が在ります(終)"
>  With CreateObject("VBScript.RegExp")
>    .Pattern = "([一-龠])" ' これで漢字1文字に該当
>    .Global = True
>    Set objMatchs = .Execute(strTarget)
>    For Each objMatch In objMatchs
>      Debug.Print objMatch.FirstIndex & "文字目:"; objMatch.Value
>    Next
>  End With
>End Sub

【38774】Re:文字列から漢字のみ取得
回答  Blue  - 06/6/9(金) 20:03 -

引用なし
パスワード
   ▼mam さん:
> 今更ですが、
> ex:ブック名
>    (1G)鈴木ファイル.xls → 鈴木  のみ抽出
>    (2G)佐々木ファイル1.xls  → 佐々木 のみ抽出
>    (3G)岡ファイル.xls     → 岡   のみ抽出
でしたら、

> .Pattern = "([一-龠])"

.Pattern = "([一-龠]+)"
とすることで連続した漢字は取得できます。 
ただ、佐々木の繰り返し文字の「々」はどうも漢字ではないと認識されてしまうようです。

なので、例外的に
.Pattern = "([一-龠|々]+)"
としておいてください。(ほかにもあるかもしれませんけど)

以下サンプル)

Sub sample()
  MsgBox GetNameStr("(1G)鈴木ファイル.xls")
  MsgBox GetNameStr("(2G)佐々木ファイル1.xls")
  MsgBox GetNameStr("(3G)岡ファイル.xls")
End Sub

' ファイル名から、先頭から探して最初の連続した漢字文字列を取得する
' ない場合は空文字。
Private Function GetNameStr(ByVal strFileName As String)
  Dim objMatchs As Object
  Dim objMatch As Object
  Dim strTarget As String

  With CreateObject("VBScript.RegExp")
    .Pattern = "([一-龠|々]+)"
    .Global = True
    Set objMatchs = .Execute(strFileName)
    For Each objMatch In objMatchs
      GetNameStr = objMatch.Value
      Exit Function
    Next
  End With
End Function

【38776】Re:文字列から漢字のみ取得
お礼  mam  - 06/6/9(金) 20:53 -

引用なし
パスワード
   ▼Blue さん:

 コードの再掲示ありがとうございます。
 なんせ、、先のコードを一つ一つ追っかけては、深み(?)に
入り、中々本題にまで進めておりません。
 
 >> .Pattern = "([一-龠])"

 ↑この部分に指定されている文字すらなんだか、さっぱりで
たどり着いたところが「メタキャラクタ」
 ふむふむ、、といった感じの進捗です。

 以下のコードで意図している操作は出来そうです。
「々」の細かい点にまで、実装して頂きました様で、
本当にありがとうございました。
 今後ともご指導よろしくお願いします。

 本日はこれにて帰宅して来週から、また奮起したいと思います。


>▼mam さん:
>> 今更ですが、
>> ex:ブック名
>>    (1G)鈴木ファイル.xls → 鈴木  のみ抽出
>>    (2G)佐々木ファイル1.xls  → 佐々木 のみ抽出
>>    (3G)岡ファイル.xls     → 岡   のみ抽出
>でしたら、
>
>> .Pattern = "([一-龠])"
>を
>.Pattern = "([一-龠]+)"
>とすることで連続した漢字は取得できます。 
>ただ、佐々木の繰り返し文字の「々」はどうも漢字ではないと認識されてしまうようです。
>
>なので、例外的に
>.Pattern = "([一-龠|々]+)"
>としておいてください。(ほかにもあるかもしれませんけど)
>
>以下サンプル)
>
>Sub sample()
>  MsgBox GetNameStr("(1G)鈴木ファイル.xls")
>  MsgBox GetNameStr("(2G)佐々木ファイル1.xls")
>  MsgBox GetNameStr("(3G)岡ファイル.xls")
>End Sub
>
>' ファイル名から、先頭から探して最初の連続した漢字文字列を取得する
>' ない場合は空文字。
>Private Function GetNameStr(ByVal strFileName As String)
>  Dim objMatchs As Object
>  Dim objMatch As Object
>  Dim strTarget As String
>
>  With CreateObject("VBScript.RegExp")
>    .Pattern = "([一-龠|々]+)"
>    .Global = True
>    Set objMatchs = .Execute(strFileName)
>    For Each objMatch In objMatchs
>      GetNameStr = objMatch.Value
>      Exit Function
>    Next
>  End With
>End Function

7502 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free