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(エクセル)
-
Excelでカタカナ・ひらがな・英数字の抽出
その他(Microsoft Office)
-
-
4
セル内の文字列が日本語か英語かを厳密に識別したい
Visual Basic(VBA)
-
5
EXCELで、漢字のみ抽出する式を教えてください。
Excel(エクセル)
-
6
エクセル、関数でセル内の半角カタカナ漢字、を分けて他のセルへ表示する方法
Excel(エクセル)
-
7
Excelの1つのセルに入力されたアルファベットと数字を分けるには?
Excel(エクセル)
-
8
エクセルで数字とアルファベットと文字列を分割する方法
Visual Basic(VBA)
-
9
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
10
エクセルでセルの中身が漢字かどうか識別する方法は?
Excel(エクセル)
-
11
エクセル 同一セル内の数値と文字を分ける関数
Excel(エクセル)
-
12
Excel2007でカタカナの文字のみを抽出、表示するには?
その他(Microsoft Office)
-
13
エクセルで全角と半角を分離する方法って?
Excel(エクセル)
-
14
Excel セル内の文字と数字をわけるには??
Excel(エクセル)
-
15
エクセルでセルのデータがカタカナかどうか調べたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで 自動的に◯や数字を...
-
【マクロ】2回実行したら、エ...
-
エクセルのツールバーから数値...
-
特定の文字列を含む、住所を抽...
-
Excel 2019 [オプション]の[リボンのユ...
-
祝日と土曜、日曜の合計をカウ...
-
EXCELの散布図で日付が1900年に...
-
マイクロソフトのPADを使ってい...
-
絶対参照
-
エクセルでCtrl+Tでテーブルの...
-
【マクロ】名前を保存する際に...
-
エクセルのクイックアクセスツ...
-
【マクロ】VLOOKUPにて参照元に...
-
Excel分数の表示について
-
【EXCEL】画像の黄色部分の抽出...
-
DATE関数で現在の年齢を出した...
-
Excelについて
-
マクロエクセルのブロック解除
-
Excelピボットテーブルの1行目
-
REGEXREPLACE関数について、
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報