No.8ベストアンサー
- 回答日時:
こんばんは。
Wendy02です。#3 のマクロの訂正です。しかし、次のマクロのほうがスピードは速いはずです。
'----------------------------------
'出力する列は?
Const OUTPUTCOL As String = "C"
'----------------------------------
iCol = Columns(OUTPUTCOL).Column '← 入れ替え
Set rng = Range("A1", Range("A65536").End(xlUp)) '←入れ替え
Application.ScreenUpdating = False
↓
以下のようになります。
Set rng = Range("A1", Range("A65536").End(xlUp))
iCol = Columns(OUTPUTCOL).Column - rng.Column
'----------------------------------------------------------------
なお、混在した場合のものも作っておきました。
ローリング・ストーンズRolling Stones
Rolling Stonesローリング・ストーンズ
でも、両方とも切り分けるように作りました。
'---------------------------------------------------------------
Sub reSeparateAlphabetKana()
'英語・カタカナ混在の場合に区切るマクロ
Dim rng As Range
Dim c As Range
Dim iCol As Long
'----------------------------------
'出力する列は?
Const OUTPUTCOL As String = "B"
'---------------------------------
Set rng = Range("A1", Range("A65536").End(xlUp))
iCol = Columns(OUTPUTCOL).Column - rng.Column
Application.ScreenUpdating = False
For Each c In rng
If VarType(c.Value) = vbString Then
c.Offset(, iCol).Resize(, 2).Value = reSplit(c.Value)
End If
Next c
Application.ScreenUpdating = True
End Sub
Function reSplit(strText As String) As String()
'英語・カタカナを分離する関数
Dim Matches As Object
Dim Match As Object
Dim buf(1) As String
With CreateObject("VBScript.RegExp")
.Pattern = "^([A-z ]+|[ぁ-龠 ]+|[\uFF64-\uFF9F ]+|[A-z ]+)"
'\uFF64-\uFF9F 半角カタカナ 注意:パターンには半角空白が一つ入る
.Global = False
'全角空白は紛れ込ませない
strText = WorksheetFunction.Substitute(strText, " ", " ")
Set Matches = .Execute(strText)
If Matches.Count Then
Set Match = Matches(0)
buf(0) = Match.Value
buf(1) = Replace(strText, Match.Value, "")
End If
reSplit = buf()
End With
End Function
No.7
- 回答日時:
こんばんは。
Wendy02です。失礼しました。
=MID(A1,1,MATCH(TRUE,INDEX(CODE(MID(A1,ROW($A$1:$A$256),1))<224,,),0)-1)
一応、これでよいと思います。 224というのは、文字コードの半角カタカナの最後に文字に1足した数です。
この現象は、良く調べてみないと分かりませんが、文字の比較に関しては、ワークシート上では、何か、特別な仕掛けがあるようです。
No.6
- 回答日時:
こんばんは。
#3 のWendy02 です。数式の場合は、こんに風に、等式を変えればよいと思います。
"ぁ"にした理由は特にありません。"ァ"でもよいのですが、"ぁ"のほうが小さいからです。
C列
=MID(A1,1,MATCH(TRUE,INDEX(MID(A1,ROW($A$1:$A$256),1)<"ぁ",,),0)-1)
D列に出力 (こちらは同じです)
=SUBSTITUTE(A1,C1,"")
マクロは、17行目あたりの以下のコードを
If StrComp(StrConv(Mid(c.Value, i, 1), vbNarrow), "~") > 0 Then
↓
If StrComp(StrConv(Mid(c.Value, i, 1), vbNarrow), "ぁ") < 0 Then
に変えればよいです。
なお、混在している場合の切り分けは、また、ここの回答の補足などでご相談ください。
この回答への補足
ありがとうございます
ただ、これですと
ローリング・ストーンズRolling Stonesが
"ローリング" "・ストーンズRolling Stones"
となってしまいます
No.5
- 回答日時:
No.3さんのアイデアを拝借すれば、No.4の B1 の式は次式でもOKかと。
B1: =LEFT(A1,MATCH(TRUE,(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>"z",0)-1) (配列数式)
No.3
- 回答日時:
こんばんは。
A列の1行目からデータがあるとします。
C列に出力
=MID(A1,1,MATCH(TRUE,INDEX(MID(A1,ROW($A$1:$A$256),1)>"z",,),0)-1)
D列に出力
=SUBSTITUTE(A1,C1,"")
マクロなら、こんなものが簡単でもよいかも……
Sub SeparateAlphabet()
'アルファベットと日本文字とを分離するマクロ
Dim rng As Range
Dim i As Long
Dim c As Range
Dim iCol As Long
'----------------------------------
'出力する列は?
Const OUTPUTCOL As String = "C"
'----------------------------------
iCol = Columns(OUTPUTCOL).Column
Set rng = Range("A1", Range("A65536").End(xlUp))
Application.ScreenUpdating = False
For Each c In rng
If c.Value <> "" Then
For i = 1 To Len(c.Value)
If StrComp(StrConv(Mid(c.Value, i, 1), vbNarrow), "~") > 0 Then
c.Offset(, iCol - 1).Value = Mid(c.Value, 1, i - 1)
c.Offset(, iCol).Value = Mid(c.Value, i)
Exit For
End If
Next i
End If
Next c
Set rng = Nothing
Application.ScreenUpdating = True
End Sub
p.s. zap35さんへ
この前から、そのコードは見ていましたが、
"^[A-Z,A-Z, ]+"
正規表現パターンに、「,(コンマ)」区切りはないはずです。コンマも一つの文字として見なされます。余計なお世話かもしれませんが。
この回答への補足
早速ありがとうございました
関数、マクロどちらもうまくいきました。
"ビートルズBeatles"のように日本語+アルファベットの場合はどうしたらいいですか
No.2
- 回答日時:
はじめまして
いったんそのデータをタグ付き置換と正規表現を使えるテキストエディタなどにコピーします。
秀丸がおすすめです。
正規表現置換で
置換前:[a-z]\f[ア-ヲ]
置換後:\0*\1
を実行します。
これで英字とカタカナの間に全角の「*」が入ります。
これを保存してエクセルで再度読み込み、ターゲットの列を選択して、データ→区切り位置で「カンマやタブで…」にチェックを入れ次へ
区切り文字のその他にチェックを入れ「*」を指定して完了をクリック
これでうまくいくはずです。
No.1
- 回答日時:
先頭から連続する「英文字(全角半角混在可)と空白」を右隣のセルに、残りを更に右隣のセルに格納するマクロです。
実際のシートに合わせて、マクロ中の
RETSU = "A" '文字列の並んでいる列を指定する
の行は修正が必要です。(今はA列を指定しています)
Sub AZsplit()
Dim RE, strPattern, RETSU As String, Target As Range
Dim idxR As Long, mchItem
Set RE = CreateObject("VBScript.RegExp")
strPattern = "^[A-Z,A-Z, ]+"
RETSU = "A" '文字列の並んでいる列を指定する
For idxR = 1 To ActiveSheet.Cells(65536, RETSU).End(xlUp).Row
Set Target = Cells(idxR, RETSU)
With RE
.Pattern = strPattern
.IgnoreCase = True
.Global = True
Set mchItem = .Execute(Target.Value)
If mchItem.Count > 0 Then
Target.Offset(0, 1) = mchItem(0).Value
Target.Offset(0, 2) = Right(Target.Value, _
Len(Target.Value) - mchItem(0).Length)
End If
End With
Next idxR
Set RE = Nothing
End Sub
マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はALT+F8を押して、マクロ名を選択します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロ作成初心者です。CSVファイルの日付データについて 3 2022/12/14 06:02
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) エクセルの一括コピー 1 2022/07/09 22:24
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
文字列から英数字のみを抽出する関数
Excel(エクセル)
-
数値とアルファベットに分ける(エクセル)
Excel(エクセル)
-
EXCELで、漢字のみ抽出する式を教えてください。
Excel(エクセル)
-
-
4
セル内の文字列が日本語か英語かを厳密に識別したい
Visual Basic(VBA)
-
5
Excelでカタカナ・ひらがな・英数字の抽出
その他(Microsoft Office)
-
6
Excelの1つのセルに入力されたアルファベットと数字を分けるには?
Excel(エクセル)
-
7
エクセルで数字とアルファベットと文字列を分割する方法
Visual Basic(VBA)
-
8
Excel2007でカタカナの文字のみを抽出、表示するには?
その他(Microsoft Office)
-
9
エクセル 同一セル内の数値と文字を分ける関数
Excel(エクセル)
-
10
エクセル、関数でセル内の半角カタカナ漢字、を分けて他のセルへ表示する方法
Excel(エクセル)
-
11
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
12
エクセルで全角と半角を分離する方法って?
Excel(エクセル)
-
13
Excelにて、カタカナだけのセルを抜き出す方法は?
Excel(エクセル)
-
14
Excel セル内の文字と数字をわけるには??
Excel(エクセル)
-
15
エクセルでセルの中身が漢字かどうか識別する方法は?
Excel(エクセル)
-
16
EXCELで、セル内の半角カナのみを削除する関数
Excel(エクセル)
-
17
セル内文章から、英数字のみ取り出す関数を教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
はがきについて。
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
【関数】先頭だけにある、半角...
-
Excel ピボットテーブルで日付...
-
Excelのpivotについて質問です
-
時間によってファイル名が変わ...
-
エクセル 白黒印刷で白線を印刷...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
WPS OFFICEでの縦書きについて
-
Excelのチェックボックスの使い...
-
エクセルの条件付き書式につい...
-
エクセルのセルに同じ大きさの...
-
エクセルの関数について教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報