
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も見ています
-
数値とアルファベットに分ける(エクセル)
Excel(エクセル)
-
Excelの1つのセルに入力されたアルファベットと数字を分けるには?
Excel(エクセル)
-
エクセル、関数でセル内の半角カタカナ漢字、を分けて他のセルへ表示する方法
Excel(エクセル)
-
-
4
文字列から英数字のみを抽出する関数
Excel(エクセル)
-
5
Excelでカタカナ・ひらがな・英数字の抽出
その他(Microsoft Office)
-
6
セル内の文字列が日本語か英語かを厳密に識別したい
Visual Basic(VBA)
-
7
EXCELで、漢字のみ抽出する式を教えてください。
Excel(エクセル)
-
8
エクセルでセルの中身が漢字かどうか識別する方法は?
Excel(エクセル)
-
9
エクセル 同一セル内の数値と文字を分ける関数
Excel(エクセル)
-
10
エクセルで数字とアルファベットと文字列を分割する方法
Visual Basic(VBA)
-
11
文字列からアルファベットを抽出
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について
-
エクセルのリストについて
-
【マクロ】元データと同じお客...
-
エクセルのVBAで集計をしたい
-
【画像あり】オートフィルター...
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
【マクロ】変数に入れるコード...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
【マクロ】左のブックと右のブ...
-
エクセルの複雑なシフト表から...
-
【マクロ】別ファイルへマクロ...
-
他のシートの検索
-
エクセルシートの見出しの文字...
-
vba テキストボックスとリフト...
-
【マクロ】【配列】3つのシー...
-
ページが変なふうに切れる
-
【マクロ】オートフィルターの...
-
【マクロ】列を折りたたみ非表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報