いつもお世話になっております。
EXCELのマクロについて教えてください。
シートに
男
・男・
女・
・・男
・男・・
・女
上記のように1つのセルに「・男」「女」
など文字だけでなく「・」がバラバラに入った
データが列方向に400件あります
次の列に、「男」「女」だけの文字だけを抜き取りたいので、下のようなマクロを組みました。
Sub 性別取り出し()
Range("a2").Select
Do Until retu = 2
retu = ActiveCell.Column
Cells.Find(What:="男", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns,
SearchDirection:=xlNext, MatchCase:=False _
, MatchByte:=False,
SearchFormat:=False).Activate
Cells.FindNext(After:=ActiveCell).Activate
ActiveCell.Offset(0, 2).Activate
ActiveCell.Value = "男"
ActiveCell.End(xlToLeft).Activate
Loop
MsgBox counter & "回ループしました"
End Sub
A列 B列
男 |男
・男・ |男
女・ |
・・男 |男
・男・・|男
・女 |
というような結果を期待したのですが
実際は
A列 B列
男 |男 | 男
・男・ | |
女・ | |
・・男 |男 | 男
・男・・| |
・女 | |
のように、B列の結果が飛び飛びになったり
C列以降に男の文字が入ったり
永遠にループを続けたりします。
いろいろ試しましたが、うまくいきません
どうしたら良いか教えてください。
よろしくお願いします。
ちなみにデータの「・」はALT+ENTERの改行マークか何らかのスペースの跡らしく、検索や置換では引っかかりません。
No.6ベストアンサー
- 回答日時:
>問題は「・・」です。
まずは、そのゴミがなにであるか調べましょう。
列を挿入して、作業列を作り
A,B,C
データ(A1),=MID($A$1,ROW(),1),=CODE(MID($A$1,ROW(),1))
のようにして、B,Cを下にコピーすると
それぞれの文字がBに、その文字のコードがCに表示されます。
例えば、ALT+ENTERで改行されている場合
コードとして 10 が表示されます。(文字としては表示されません)
件のデータのコードがわかれば
=SUBSTITUTE(A1,CHAR(10),"")
のようにして、件のデータ(この例の場合は、コード10)を取り除くことができます。
文字の区切りのマークとして残しておきたい場合は
=SUBSTITUTE(A1,CHAR(10),"<BR>")
などとすればいいでしょう。
ありがとうございました。コードとして13が表示されましたので、SUBSTITUTE関数を使って取り除くことができました。
助かりました。本当にありがとうございました。
No.5
- 回答日時:
こんにちは。
Findメソッドは、決まったアルゴリズムを使います。それ以外の方法ではうまくいかないことが多いです。一応、"女"の文字は、男の隣のセルに出すようにしました。
いっしょのセルなら、サブルーチンの中の
.Offset(, i + 1).Value
は、
.Offset(, 1).Value
にしてください。
'-------------------------------------------
Sub PickUpAtCells()
Dim c As Range
Dim myFadd As String
Dim rng As Range
Dim i As Integer
Dim Genders(1) As String
Genders(0) = "男"
Genders(1) = "女"
Set rng = ActiveSheet.Columns(1)
Application.ScreenUpdating = False
For i = 0 To 1
Set c = rng.Find( _
What:="*" & Genders(i) & "*", _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext)
If Not c Is Nothing Then
myFadd = c.Address
Do
s_PickupCells c, Genders(i), i 'サブルーチンへ
Set c = rng.FindNext(c)
Loop Until c Is Nothing Or c.Address = myFadd
End If
Next i
Application.ScreenUpdating = True
End Sub
Sub s_PickupCells(myRng As Range, SearchWord As String, i As Integer)
'サブルーチン
Dim number As Integer
number = InStr(myRng, SearchWord)
If number > 0 Then
myRng.Offset(, i + 1).Value = Mid$(myRng.Value, number, 1)
End If
End Sub
'-------------------------------------------
No.4
- 回答日時:
例えば、B1に=MID(A1,IF(ISERROR(FIND("男",A1)),0,FIND("男",A1))+IF(ISERROR(FIND("女",A1)),0,FIND("女",A1)),1)
としてはいかがでしょう。ただし、1つのセルに男or女が2文字以上あるとだめですが・・・
男だけ表示するのなら
=MID(A1,IF(ISERROR(FIND("男",A1)),0,FIND("男",A1)),1)
でいけると思います。
No.2
- 回答日時:
原因は、
>Cells.Find
で、検索する範囲をA列に限定していないのが1つの原因だと思います。
マクロによらないでも、単にB列に
=IF(COUNTIF(A1,"*男*"),"男",IF(COUNTIF(A1,"*女*"),"女",""))
とするだけでいいと思います。
この回答への補足
ありがとうございました。うまく動作しました。
実はこの後にもデータを抜き出さなくてはいけない作業が山済みになっています。
それは、B2セルには
「指導内容は○○/△△・・・・対象は○○」
B3セルには
「指導内容は△△/◇◇/○○・・対象は△△」
というような情報から
「指導内容は○○/△△」のみや
「対象は△△」を取り出すのですが
MIDやFIND関数で取り出すことはできると考えています。
問題は「・・」です。
先ほども記述しましたが、「・・」は文字でなく
改行かスペースの跡らしく検索や置換ができません。
セルによってその数もばらばらなので
「指導内容は○○/△△・・・・」
「指導内容は○○/△△・・」
と「・・」が残ってしまいます。
どうすればよいのでしょうか。
ぜひよろしくお願いします
No.1
- 回答日時:
Cell関数ではダメですか?
Cell B1に以下の関数を入力してください。
=IF(ISNA(VLOOKUP("*男*",A1,1,FALSE)),IF(ISNA(VLOOKUP("*女*",A1,1,FALSE)),"?","女"),"男")
で、Cell B1を選択し、A列の最後のデータの行まで、ずずーっとドラッグ(要するにコピーですね)。
すると、B列に「男」「女」、どちらもなければ「?」が表示されると思います。
註:「ツール」-> 「アドイン」メニューで、「分析ツール」を選択しておいてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルマクロで教えてください 2 2022/05/04 09:07
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Visual Basic(VBA) 指定の条件に応じたセルの場所に〇印(図形)を描く 2 2022/11/08 15:26
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワポで曲がった両矢印の簡単...
-
パワーポイント「スライドショ...
-
Power pointって、スクリーンに...
-
パワーポイントの表
-
【パワーポイントのフォントが...
-
Powerpointを用いた論文の発表...
-
パワーポイントのアニメーショ...
-
office2019プロダクトキー紛失
-
エクセルファイルが他のデータ...
-
プレゼン時のポインター
-
PowerPoint2007を使用していま...
-
ホワイトボード 油性マジックの...
-
Accessで Tabキーを押したとき...
-
発表用の資料作成
-
この図を参照してください。 こ...
-
パワーポイント資料を、 インク...
-
パワーポイントで説明しながら...
-
パワーポイントのLabel1に日付設定
-
パワーポイントで教えてくださ...
-
パワーポイントで、全てのスラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワポで曲がった両矢印の簡単...
-
パワーポイントの表
-
パワーポイント「スライドショ...
-
音声マークを一括非表示にしたい。
-
ホワイトボード 油性マジックの...
-
エクセル・パワーポイントなど...
-
パワーポイントで、プレゼン用...
-
PowerPointVBAでスライドマスタ...
-
PowerPointでスライドマスタの...
-
Power point で、アニメって作...
-
パワポ初心者で申し訳ありませ...
-
PowerPointで、作成されたファ...
-
パワーポイントで資料を作る時 ...
-
【パワーポイントのフォントが...
-
パワーポイントのアニメーショ...
-
ExcelのグラフをPowerPointに貼...
-
パワーポイント2019 図の透...
-
パワーポイントで、全てのスラ...
-
PowerPointのアニメーションで...
-
PowerPointで、線を点滅した感...
おすすめ情報