• ベストアンサー

VB6で特定の数字の部分だけを変更したい

Excel2000のマクロでプログラムを組んでいます。 よろしくお願いします。 「DA21」や「DA30」という文字と数字が混じっている状態で 各数字の部分を1つだけ引いた状態にしたいのですが、 「DA」という文字の後ろにある数字だけ変えたい場合、 どのようなプログラムになるのか教えてもらえないでしょうか? 例: DA21 → DA20 DA30 → DA29

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

NO3です キー記録で作ってみました。 Sub Macro1() Range("A1").Select Selection.Insert Shift:=xlDown Range("A2").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Range("A1").Select ActiveSheet.Paste Range("A2").Select Selection.End(xlDown).Select Selection.ClearContents End Sub これでどうでしょうか

takagoo100
質問者

お礼

ご返答ありがとうございます。 できました!ありがとうございます。 自分の想像してたプログラムコードと違ってたので驚きましたが、 それはこれから調べたいと思います。

その他の回答 (4)

noname#140971
noname#140971
回答No.4

Excel は一度も操作したこともない門外漢ですが・・・。 横から、チクッと失礼。 [イミディエイト] ? SelectMoji("DA20") & Trim(Str$(SelectSuji("DA20") - 1)) DA19 ? SelectMoji("DA30") & Trim(Str$(SelectSuji("DA30") - 1)) DA29 と、まあ、ここはシコシコと SelectMoji 関数、SelectSuji 関数を作ったらどうでしょう。 Option Explicit Public Function SelectMoji(ByVal Text As String) As String   Dim I As Integer   Dim L As Integer      L = Len(Text)   For I = 1 To L     If InStr(1, "0123456789", Mid$(Text, I, 1), vbTextCompare) > 0 Then       Exit For     End If   Next I   SelectMoji = Left$(Text, I - 1) End Function Public Function SelectSuji(ByVal Text As String) As String   Dim I As Integer   Dim L As Integer      L = Len(Text)   For I = L To 1 Step -1     If InStr(1, "0123456789", Mid$(Text, I, 1), vbTextCompare) = 0 Then       Exit For     End If   Next I   SelectSuji = Right$(Text, L - I) End Function

takagoo100
質問者

お礼

ご返答ありがとうございます。 この関数でだいぶ考えを進めることができました。ありがとうございます。 ただせっかくお答えして頂いて申し訳ないのですが、 ANo.2の補足の質問について、もう一度お考え頂けないでしょうか? よろしくお願いします。

回答No.3

頭2文字が文字・後の2文字が数字であることが確実であれば Function henkan(ByVal vstr As String) As String henkan = Left(vstr, 2) & Right("00" & Val(Right(vstr, 2)) - 1, 2) End Function でいけると思います。

takagoo100
質問者

お礼

ご返答ありがとうございます。 せっかくお答えして頂いて申し訳ないのですが、 ANo.2の補足の質問について、もう一度お考え頂けないでしょうか? よろしくお願いします。

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.2

#1です。 もしかしたらすでに入力済みのデータに対してということでしょうか? だとした場合前記回答では対応していません。 新規に作成する場合の方法となります。 既存である場合は入力済みで数字の位置が固定なら簡単にできます。 既存データが A1 ~ A99 のセルに入力されている場合。 値が DDnn ( nnは数字部分 1~99) であるなら。 新しいセル B1 に次のように入力してください。 =LEFT(A1,2) & "01" もし"01" 部分を変化させたいというなら 任意のセルの値から 加算、減算するなりすれば大丈夫です。 たとえば 既存データ A1 の値から1を加算するなら =LEFT(A1,2) & RIGHT("00" & RIGHT(A1,2) + 1,2) でできます。 _____________________________ 既存データの加工について VBAマクロで行う場合は以下のマクロを使用してください Sub TEST2マクロ() Dim I As Integer Dim STRwk As String Dim MOJI As String For I = 1 To 99 MOJI = Worksheets("Sheet1").Range("A" & I).Value STRwk = Left(MOJI, 2) & Right("00" & Right(MOJI, 2) + 1, 2) Worksheets("Sheet1").Range("B" & I).Value = STRwk Next I End Sub

takagoo100
質問者

補足

ご返答ありがとうございます。 すいません、数字の部分は2桁や3桁の場合もありました・・・ なんで例でもっといろんなパターンを示さなかったのか 今になって後悔しています・・・ これだけ分かれば全部できると思っていましたが、 実際考えてみたら想像以上に複雑だったので 改めて全部具体的に示しますので、お手数ですがもう一度お答え頂けないでしょうか? よろしくお願いします。 例: A1のセルの数式に =IF(Data!B2>1,Data!B2,"")          ・          ・          ・ A10のセルの数式に =IF(Data!B11>1,Data!B11,"")          ・          ・          ・ A100のセルの数式に =IF(Data!B101>1,Data!B101,"") となっています。そこでセルの数式を IF(Data!B2>1,Data!B2,"") なら IF(Data!B1>1,Data!B1,"") IF(Data!B101>1,Data!B101,"") なら IF(Data!B100>1,Data!B100,"") と同じセルに(A1ならA1に)置換したいです。 これをVBAマクロで行いたいです。

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

結果はどこに出力するのでしょうか? Excel の CELL なら VBAを用いずに次のようにしてください A1 セルに1を入力 A2 セルに =A1+1 を入力 A2 セルの右隅をマウスで右クリックしながら下まで下ろす。 値が自動的に入ります。 A1~A999 セルの書式にて文字色を白くします。 B1 セルに次のように入力します。 ="DD" & right("00" & A1,2) と入力します。 A1 セルの右隅をマウスで右クリックしながら下まで下ろす。 値が自動的に入ります。 _____________________________________________________ VBA で 行うには 以下のコードを 標準モジュールに貼り付けてから マクロを実行してください。 Sub TESTマクロ() Dim I As Integer Dim STRwk As String For I = 1 To 99 STRwk = "DD" & Right("00" & I, 2) Worksheets("Sheet1").Range("A" & I).Value = STRwk Next I End Sub ___________________________________________________________ 以上

関連するQ&A