No.2です。
投稿後もう一度質問文を読み返してみると
>完成形としては、当初のセルに英文のみ、右隣のセルに訳文のみといったものを・・・
とありましたので、前回のコードは英字関係のみを抽出するだけでした。
ご希望の方法ではなかったと思いますので、もう一度顔を出しました。
B列に英字関係・C列に日本語を!という感じです。
尚、日本語を抽出するとなるとかなり、条件が多くなってしまいます。
第一水準・第二水準漢字・ひらがな・カタカナ・「ぁぃぅぇぉっゎ」等の促音
「が行・ざ行・・・」等々の濁音などに対応すると大変なので、前回のB列以外をC列にまとめるコードにしてみました。
Sub test() 'この行から
Dim i, k As Long
Dim str, buf1, buf2 As String
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For k = 1 To Len(Cells(i, 1))
str = Mid(Cells(i, 1), k, 1)
If str Like "[A-z 0-9 . , ! ? ]" Then
buf1 = buf1 & str
Else
buf2 = buf2 & str
End If
Next k
Cells(i, 2) = buf1
Cells(i, 3) = buf2
buf1 = ""
buf2 = ""
Next i
End Sub 'この行まで
これでC列にB列に表示されている文字以外が表示されると思います。
尚、確認の意味で敢えてA列はそのまま残しています。
A列削除は簡単だと思いますので・・・
何度も失礼しました。m(_ _)m
> 私の現状の知識では、悲しいかな、先頭文字か、1文字ずつしか抽出できないのです。
ちょっと、
現在のセルの中身がわからないのですが、たとえば
A1セルに
This is a pen. これはペンです。
とあるとした場合。
For i = 1 To Len(Range("A1").Value)
If AscW(Mid(Range("A1").Value, i, 1)) > AscW("z") Then
Eng = Left(Range("A1").Value, i - 1)
Jpn = Mid(Range("A1").Value, i, Len(Range("a1").Value))
Exit For
End If
Next
Range("A1").Value = Eng
Range("B1").Value = Jpn
といった具合でもよろしいと思うのですが…
>単一セル内に英文+訳文といったデータがある
「I am a boy. 私は少年です。」といった具合に,必ず半角で書かれた英文とそれに続いて日本語の訳文が続いているだけの単純な構図なら
=LEFT(A1,LEN(A1)*2-LENB(A1))
=RIGHT(A1,LENB(A1)-LEN(A1))
などのようにして関数で切り出すのも容易です(再計算で時間が掛かる?ことは無いと思います)が,入り交じって混在しているのでしたら一文字ずつ舐めていくしかありませんね。
#少しでも具体的なサンプルを挙げてご相談を書いてもらえれば,クイズになることもなくすっきり回答が寄せられます。今後のご参考に。
#まぁ誰が書いても同じようなマクロにしかなりませんが
sub macro1()
dim h as range
dim buf1 as string, buf2 as string, buf as string
dim i as long
for each h in range("A1:A" & range("A65536").end(xlup).row)
buf1 = ""
buf2 = ""
for i = 1 to len(h.text)
buf = mid(h.text, i, 1)
if strconv(buf, vbwide) = buf then
buf2 = buf2 & buf
else
buf1 = buf1 & buf
end if
next i
h.offset(0, 1) = buf1
h.offset(0, 2) = buf2
next
end sub
こんばんは!
VBAでの一例です。
A列の1行目からデータがあり、「英字」「数字」「?」「.」「,」「!」(←すべて半角)及び半角スペースを
B列に表示するとします。
一文字ずつ舐めるように検索していますので、少し時間がかかるかもしれません。
画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub test() 'この行から
Dim i, k As Long
Dim str, buf As String
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For k = 1 To Len(Cells(i, 1))
str = Mid(Cells(i, 1), k, 1)
If str Like "[A-z 0-9 . , ! ? ]" Then
buf = buf & str
End If
Next k
Cells(i, 2) = buf
buf = ""
Next i
End Sub 'この行まで
※ 尚、他にも表示したい文字があれば
If str Like "[A-z 0-9 . , ! ? ]" の部分内で、半角スペースの後に追加すれば大丈夫です
他に良い方法があればごめんなさいね。m(_ _)m
お礼
kmetu 様ありがとうございました。 先後してしまいましたが、ご指摘の点で解決に至りました。 ご報告が遅れて申し訳ありませんでした。 機会がありましたら、またよろしくお願いします。