- ベストアンサー
エクセルのマクロのつくり方について質問です
次のようなものをつくりたいのですが、よくわからずに困っています 例)A列に次のような型式が入力してあります U100-00-1000 U120-01-0001 D100-00-0002 I120-03-0001 これを、Uで始まり、間の2桁が00の場合は、B列に1を、それ以外はB列に2を入れる条件式を入れたいのです 上の例で言えば、U100-00-1000には1で、それ以外は2を、B列に入れる ただし、A列の型式は、何行になるかわからないので、Loopを使う必要があると思います Do…Loopを、Ifで挟んだらよいかと思うのですが、セルをどのように指定してよいのかがよくわかっていません どうかご指導お願いいたします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか? Range("A1").Select '開始位置をA1にする Do Until Selection.Value = "" 'A列が空白になるまで繰り返す If Left(Selection.Vlaue, 1) = "U" And Mid(Selection.Value, 6,2) = "00" Then Selection.Cells(1, 2).Value = 1 '右隣のセル(B)に1を Else Selection.Cells(1, 2).Value = 2 '右隣のセル(B)に1を End If Selection.Cells(2,1).Select '処理対象を一つしたのセルに Loop 実際はマクロよB列にりワークシート関数で =IF(AND(LEFT(A1,1)="U",MID(A1,6,2) = "00"),1,2) などのほうがよいかと思います。
その他の回答 (3)
- Masa2072
- ベストアンサー率51% (94/182)
No.2です。 記述に間違いがありました。大変申し訳ありません。 > If Left(Selection.Vlaue, 1) = "U" And Mid(Selection.Value, 6, 2) = "00" Then ここの Left(Selection.Vlaue, 1) の部分ですが Left(Selectioin.Value, 1)の間違いです。そのままコピペしたのであれば訂正してください。
お礼
こちらこそ、気がつかなくてすみませんでした おかげさまで、無事動きました 会社でこんな方法があるんだよって披露しましたら 「シンプルですごい」と評判でした Selection.Cells(2, 1).Select で、セルを指定しているのに 次々と次のセルに移動するのですね! ありがとうございました
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 --------------------------------- 初級マクロ(Like 演算子を使う方法) 'どこでも登録可能 Sub Test1() Dim i As Long i = 1 '初期値 With ActiveSheet Do Until .Cells(i, 1).Value = "" If .Cells(i, 1).Value Like "U###-00-####" Then .Cells(i, 2).Value = 1 Else .Cells(i, 2).Value = 2 End If i = i + 1 Loop End With End Sub -------------------------------- 正規表現を使ったマクロ(複雑な内容の場合) '標準モジュール Sub Test2() Dim c As Range Dim buf As String Application.ScreenUpdating = False With CreateObject("VBScript.RegExp") '正規表現パターン .Pattern = "U\d{3}\-(\d{2})-\d+" .Global = False For Each c In Range("A1", Range("A65536").End(xlUp)) If VarType(c) = vbString Then If .Test(StrConv(c.Value, vbNarrow)) Then buf = .Execute(StrConv(c.Value, vbNarrow)) _ .Item(0).SubMatches(0) End If If buf = "00" Then c.Offset(, 1).Value = 1 Else c.Offset(, 1).Value = 2 End If End If buf = "" Next End With Application.ScreenUpdating = True End Sub
お礼
2パターン書いていただいて、ありがとうございました まだ、初級でいっぱいいっぱいですが 上級も理解できるよう、地道に頑張りたいと思います 自分で作った時にうまく動かなかったのは、With ActiveSheet の指定が抜けていたからかしら? "U###-00-####" と表すこともできるんだ、と勉強になりました ありがとうございました
- n-jun
- ベストアンサー率33% (959/2873)
例えば、 Dim r As Range Dim x As Variant Set rs = Range("A1", Cells(Rows.Count, 1).End(xlUp)) For Each r In rs x = Split(r.Value, "-") r.Offset(, 1).Value = IIf(InStr(x(0), "U"), IIf(InStr(x(1), "00"), 1, 2), 2) Next こうゆうことですか?
お礼
回答をありがとうございます …正直なところ、括弧がたくさんある時点で ???になってしまった、勉強不足の私です なので、そういうことです!って、元気に返事ができません もう少しがんばって勉強します
お礼
回答ありがとうございます マクロって、いろんなやり方があるのですね! さっそくやってみます 関数でもいいんですね でも、会社でどのブックでも使いたい場合は、やはりマクロのほうが いいのかしら? あ~、これで今夜は眠れて、明日元気に会社にいけます ありがとうございました
補足
やってみましたが、 If Left(Selection.Vlaue, 1) = "U" And Mid(Selection.Value, 6, 2) = "00" Then で、デバックしてしまいました なぜだめなのか、自分で解決できませんでした…