
No.3ベストアンサー
- 回答日時:
#2の補足を、他人ですが回答させていただきます。
> If chk >= 9506 And chk <= 9587 Then
私も確認したのですが、全角カタカナは、-32438(濁点)、-32437(半濁点)、-32421(長音「-」)、-31936(ァ)~-31853(ン)(ただし、-31873は「・」です)の範囲にわたっています。
また、半角カタカナですが、177からではなく166からです(ヲとァ(小さいア)~ー)。また、221まででなく223までです。(222が濁点、223が半濁点)
また、#2さんのマクロの例では、各セルの先頭の文字しか確認していないようですので、
> chk = Asc(chk_str)
> If chk >= 177 And chk <= 221 Then
の部分は
Dim StrChk As Boolean
StrChk = True
For n# = 1 To Len(chk_str)
If Asc(Mid(chk_str, i, 1)) < 166 Or 224 < Asc(Mid(chk_str, i, 1)) Then
'面倒なので全角カナの条件は書いていません。上を参照にして下さい。
StrChk = False
Exit For
End If
Next i
If StrChk = True Then (chk_strを新シートへコピーする処理)
とした方がよいでしょう。
上のルーチンは、あるセルの値(chk_str)を先頭から一文字ずつ取り出し、カタカナでない文字を発見した時点でStrChkフラグをFalseにします。全ての文字がカタカナであった場合のみコピー処理をするというものです。
> Worksheets(LS_N).Cells(rr, 1).Value = chk_str
LS_Nが、新シートを挿入する前の末尾のシート名を格納しているからじゃないでしょうか?
ここは、
Worksheets(S_C+1)でいいのではないでしょうか?
申し訳ないですが、上のコードは全く動かしていないので、間違っているかもしれません。違っていたら補足で報告いただければ時間を割いて検証しますよ。
ありがとうございます。
おかげさまでうまくいきました。
完成形は以下のとおりです。
Sub test()
S_C = ActiveWorkbook.Sheets.Count
LS_N = Sheets(S_C).Name
rr = 1
Set NewSheet = Sheets.Add(After:=ActiveWorkbook.Sheets(LS_N), Type:=xlWorksheet)
For i = 1 To S_C
EndRow = Worksheets(i).UsedRange.Rows.Count + Worksheets(i).UsedRange.Row - 1
EndCol = Worksheets(i).UsedRange.Columns.Count + Worksheets(i).UsedRange.Column - 1
For j = 1 To EndCol
For k = 1 To EndRow
chk_str = Worksheets(i).Cells(k, j).Value
If chk_str = Empty Then
chk_str = " "
End If
Dim StrChk As Boolean
StrChk = True
For n# = 1 To Len(chk_str)
If Asc(Mid(chk_str, n#, 1)) < -32438 Or -31853 < Asc(Mid(chk_str, n#, 1)) Then
StrChk = False
Exit For
End If
Next n#
If StrChk = True Then
Worksheets(S_C + 1).Cells(rr, 1).Value = chk_str
rr = rr + 1
End If
Next k
Next j
Next i
End Sub
No.2
- 回答日時:
急いで作成したので半角カタカナ対応です。
またIF文でカタカナを判別しているのでMsgBox文を消し新規シートにその内容を追加するマクロを作ってください。
Sub test()
S_C = ActiveWorkbook.Sheets.Count
LS_N = Sheets(S_C).Name
Set NewSheet = Sheets.Add(After:=ActiveWorkbook.Sheets(LS_N), Type:=xlWorksheet)
For i = 1 To S_C
EndRow = Worksheets(i).UsedRange.Rows.Count + Worksheets(i).UsedRange.Row - 1
EndCol = Worksheets(i).UsedRange.Columns.Count + Worksheets(i).UsedRange.Column - 1
For j = 1 To EndCol
For k = 1 To EndRow
chk_str = Worksheets(i).Cells(k, j).Value
If chk_str = Empty Then
chk_str = " "
End If
chk = Asc(chk_str)
If chk >= 177 And chk <= 221 Then
MsgBox "行=" & k & " 列=" & j & Chr$(13) & Chr$(13) & "文字列= " & chk_str, , "カタカナ"
End If
Next k
Next j
Next i
End Sub
この回答への補足
ご回答ありがとうございます。
さっそく、試してみたところ、半角カタカナを順番にボックス表示させることはできました。
ところが、文字コードの範囲を全角カタカナの9506~9587に置き換えてみたところ、全角カタカナを拾ってくれません。
If chk >= 9506 And chk <= 9587 Then
また、新しいワークシートの左上から縦に順番に書き出したいのですが、以下のようにしてもうまくいきませんでした。
rr=1
・
・
Worksheets(LS_N).Cells(rr, 1).Value = chk_str
rr = rr + 1
何が問題なのでしょうか?
マクロはあまり詳しくないものですから、いろいろとご面倒をおかけしますが、解決方法が分かりましたらお教え下さい。
よろしくお願いいたします。
No.1
- 回答日時:
例えば関数とオートフィルタを利用するなら以下のような操作をします。
例えばA列にその文字列が入力されている場合、E1セルに以下の式を入力して右方向及び下方向にオートフィルします。
=IF(LEN($A1)<COLUMN(B1),"",CODE(MID($A1,COLUMN(B1),1)))
D1セルに以下の数式を入力して下方向にオートフィルし、この列を基準に○をオートフィルタして抽出結果を別シートにコピー貼り付けして下さい。
=IF(SUMPRODUCT((D1:Y1>=9506)*(D1:Y1<=9587))=LEN($A1),"○","")
この回答への補足
さっそくのご回答ありがとうございます。
関数の部分は非常に参考になりそうです。
ただし、入力範囲の列が1列ではなく、また、途中に空白セルなどもあり、さらにシートが複数にまたがっているのです。
ですので、オートフィルタを用いる方法ですと手間がかかりすぎると思われるのです。
マクロを利用する形でも良いので一括処理できる方法はないでしょうか?
面倒な質問で申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
- Excel(エクセル) 条件に合った数値の合計を表示させたい関数と条件指定の方法 3 2023/05/13 16:07
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存 2 2022/04/18 13:15
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Visual Basic(VBA) A列にある値をB列・C列にVBAで切り出し 3 2022/04/09 19:20
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel2007でカタカナの文字のみを抽出、表示するには?
その他(Microsoft Office)
-
EXCELで、漢字のみ抽出する式を教えてください。
Excel(エクセル)
-
Excelでカタカナ・ひらがな・英数字の抽出
その他(Microsoft Office)
-
-
4
エクセルでセルのデータがカタカナかどうか調べたい
Excel(エクセル)
-
5
EXCELで、セル内の半角カナのみを削除する関数
Excel(エクセル)
-
6
エクセルでセルの中身が漢字かどうか識別する方法は?
Excel(エクセル)
-
7
Excelで半角の文字を含むセルを探したい
Excel(エクセル)
-
8
エクセル、関数でセル内の半角カタカナ漢字、を分けて他のセルへ表示する方法
Excel(エクセル)
-
9
全角・半角混在の文字列から半角文字のみ取り出す
Excel(エクセル)
-
10
エクセルでの漢字、カタカナ、ひらがななどの抽出について
Excel(エクセル)
-
11
文字列から英数字のみを抽出する関数
Excel(エクセル)
-
12
エクセルで全角と半角を分離する方法って?
Excel(エクセル)
-
13
エクセルで、半角文字列を抽出するには
Excel(エクセル)
-
14
エクセル条件付書式について
Excel(エクセル)
-
15
エクセル カタカナの文字を検索したら漢字もヒットしてしまうのですが
Excel(エクセル)
-
16
Excel 文字列の中から数字だけを削除したい
その他(Microsoft Office)
-
17
【Excel】 住所録の建物名を分ける方法
Excel(エクセル)
-
18
エクセルでセルのデータがカタカナかどうか調べたい。
Excel(エクセル)
-
19
エクセルにおいて、住所データからマンション名のみを取り出したいです。
Excel(エクセル)
-
20
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
iPhoneのExcelアプリで、別のシ...
-
Excelシートの保護時にデータの...
-
Excelの「0」だけ非表示、小数...
-
エクセルで条件に一致したセル...
-
Excelで複数シートの選択セルを...
-
エクセルで1月0日と表示される!!
-
日付が未入力の際はゼロか、空...
-
複数シートの同じセル内容を1シ...
-
ExcelでTODAY関数を更新させな...
-
EXCELのハイパーリンクのセルを...
-
エクセルで複写のように自動入...
-
シート参照で変数を使いたい(EX...
-
Excelでスクロールすると文字が...
-
エクセルで、加筆修正したセル...
-
条件書式でリスト内以外の単語...
-
ハイパーリンク で『指定された...
-
別シートのセルを絶対参照にする
-
エクセルで”入力シート”の文字...
-
条件に合った数値の合計を表示...
-
エクセルで特定のセルの値を別...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
Excelで複数シートの選択セルを...
-
Excelシートの保護時にデータの...
-
日付が未入力の際はゼロか、空...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
複数シートの同じセル内容を1シ...
-
ExcelでTODAY関数を更新させな...
-
別シートのセルを絶対参照にする
-
Excelでスクロールすると文字が...
-
EXCELのハイパーリンクのセルを...
-
エクセルで20万行あるシート...
-
エクセルで、加筆修正したセル...
-
エクセル ハイパーリンクで画像...
-
Rangeメソッドは失敗しました。...
-
マクロ 新しいシートにデータ...
-
(Excel)あるセルに文字を入力...
-
エクセルで複写のように自動入...
-
EXCEL関数でシート名が変わる可...
-
エクセルで指定のセルのみ完全...
おすすめ情報