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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Excel2007でカタカナの文字のみを抽出、表示するには?
その他(Microsoft Office)
-
Excelでカタカナ・ひらがな・英数字の抽出
その他(Microsoft Office)
-
EXCELで、セル内の半角カナのみを削除する関数
Excel(エクセル)
-
-
4
全角・半角混在の文字列から半角文字のみ取り出す
Excel(エクセル)
-
5
エクセルでセルのデータがカタカナかどうか調べたい
Excel(エクセル)
-
6
EXCELで、漢字のみ抽出する式を教えてください。
Excel(エクセル)
-
7
エクセルで、半角文字列を抽出するには
Excel(エクセル)
-
8
エクセル、関数でセル内の半角カタカナ漢字、を分けて他のセルへ表示する方法
Excel(エクセル)
-
9
エクセルでセルのデータがカタカナかどうか調べたい。
Excel(エクセル)
-
10
Excel。英数字カタカナ混ぜこぜのセルで、カタカナのみ全角にする方法は?
Windows 95・98
-
11
エクセルの削除
Excel(エクセル)
-
12
エクセルでセルの中身が漢字かどうか識別する方法は?
Excel(エクセル)
-
13
セル内文章から、英数字のみ取り出す関数を教えてください
Excel(エクセル)
-
14
ローマ字→カタカナへ変換(エクセルで)
Excel(エクセル)
-
15
エクセルでアルファベットと日本語の文字列を分割する方法
Excel(エクセル)
-
16
Excelで半角の文字を含むセルを探したい
Excel(エクセル)
-
17
エクセル カタカナの文字を検索したら漢字もヒットしてしまうのですが
Excel(エクセル)
-
18
文字列から英数字のみを抽出する関数
Excel(エクセル)
-
19
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
複数シートの同じセル内容を1シ...
-
日付が未入力の際はゼロか、空...
-
エクセルで複写のように自動入...
-
Aというブックの1というシート...
-
Rangeメソッドは失敗しました。...
-
別シートのセルを絶対参照にする
-
(Excel)あるセルに文字を入力...
-
ExcelでTODAY関数を更新させな...
-
シート参照で変数を使いたい(EX...
-
Excelのファイル容量が減らない...
-
シートAで横に並んだ項目→シー...
-
エクセルのルビがついたセルを...
-
エクセルの文字
-
Excelで複数シートの選択セルを...
-
エクセルで、加筆修正したセル...
-
Excel 計算式の中で使っている...
-
【エクセル】文中に別シートの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで条件に一致したセル...
-
エクセルで1月0日と表示される!!
-
(Excel)あるセルに文字を入力...
-
別シートのセルを絶対参照にする
-
Rangeメソッドは失敗しました。...
-
Excelシートの保護時にデータの...
-
複数シートの同じセル内容を1シ...
-
エクセルで、加筆修正したセル...
-
シート参照で変数を使いたい(EX...
-
エクセルで複写のように自動入...
-
Excelで複数シートの選択セルを...
-
INDIRECTを使わず excelで複数...
-
ExcelでTODAY関数を更新させな...
-
式の説明をお願いします。
-
excelでハイパーリンクになって...
-
エクセルのルビがついたセルを...
-
Excelでスクロールすると文字が...
-
エクセル ハイパーリンクで画像...
おすすめ情報