Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10438 / 13644 ツリー ←次へ | 前へ→

【21819】セル内の指定した文字の前のみを削除 みっちー 05/1/31(月) 18:10 質問[未読]
【21822】Re:セル内の指定した文字の前のみを削除 ichinose 05/1/31(月) 19:36 発言[未読]
【21823】Re:セル内の指定した文字の前のみを削除 みっちー 05/2/1(火) 10:04 お礼[未読]
【21824】Re:セル内の指定した文字の前のみを削除 ichinose 05/2/1(火) 10:35 発言[未読]
【21846】Re:セル内の指定した文字の前のみを削除 みっちー 05/2/1(火) 21:37 お礼[未読]

【21819】セル内の指定した文字の前のみを削除
質問  みっちー  - 05/1/31(月) 18:10 -

引用なし
パスワード
   VBA初心者です。
A列のセルの内の特定の文字の前のみを削除するような
マクロを作成したいのですが良い方法があったら
どなたかご教授お願いします。
例「ABCC999EDHIIJ」の「ED」の前を全て削除する

指定した文字を含む行ごと削除は下記の方法で
うまく処理できたのですが、上記については
わかりません。。よろしくお願いいたします。


---------------------------------------------------------

Sub test()

'特定の文字列を含む行を削除
Dim c As Variant, Object, Range

  Workbooks.Open Filename:="book1.xls"
  fndkey1 = "AAA"
  fndkey2 = "BBB"
  
  
  For Each c In Sheets(1).Range("a1:a4000")
    '行削除
    
    If c.Value Like "*" & fndkey1 & "*" Then Rows(c.Row).Delete Shift:=xlUp
    If c.Value Like "*" & fndkey2 & "*" Then Rows(c.Row).Delete Shift:=xlUp
       
  Next

  ActiveWorkbook.Save

End Sub

---------------------------------------------------------

【21822】Re:セル内の指定した文字の前のみを削除
発言  ichinose  - 05/1/31(月) 19:36 -

引用なし
パスワード
   ▼みっちー さん:
こんばんは。

>VBA初心者です。
>A列のセルの内の特定の文字の前のみを削除するような
>マクロを作成したいのですが良い方法があったら
>どなたかご教授お願いします。
>例「ABCC999EDHIIJ」の「ED」の前を全て削除する
>
>指定した文字を含む行ごと削除は下記の方法で
>うまく処理できたのですが、上記については
>わかりません。。よろしくお願いいたします。
「ED」(半角の大文字)という文字列が判断材料と言う事でよろしいですか?
'=============================================================
Sub test()
  Dim rng As Range
  Dim myadd As String
  Set rng = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
  myadd = rng.Address
  sushiki = "=if(iserror(FIND(""ED""," & myadd & "))," & _
        "if(" & myadd & "="""",""""," & myadd & ")," & _
        "MID(" & myadd & ",FIND(""ED""," & myadd & "),LEN(" & myadd & ")))"
  Debug.Print sushiki '数式を確認して下さい
  rng.Value = Evaluate(sushiki)
End Sub

上記のコードは、アクティブシートにA列に対して、
「ED」以前の文字列を削除します。
オーソドックスな方法は、どなたかの投稿があると思いますが、
4000行ぐらいなら、こんな方法もあると言う事で・・・。


>
>
>---------------------------------------------------------
>
>Sub test()
>
>'特定の文字列を含む行を削除
>Dim c As Variant, Object, Range
>
>  Workbooks.Open Filename:="book1.xls"
>  fndkey1 = "AAA"
>  fndkey2 = "BBB"
>  
>  
>  For Each c In Sheets(1).Range("a1:a4000")
>    '行削除
>    
>    If c.Value Like "*" & fndkey1 & "*" Then Rows(c.Row).Delete Shift:=xlUp
>    If c.Value Like "*" & fndkey2 & "*" Then Rows(c.Row).Delete Shift:=xlUp
>       
>  Next
>
>  ActiveWorkbook.Save
>
>End Sub
>
>---------------------------------------------------------

【21823】Re:セル内の指定した文字の前のみを削除
お礼  みっちー  - 05/2/1(火) 10:04 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございます。

下記のコードでうまく動作させることが
できました。ありがとうございます。

またまた質問で大変恐縮なのですが、
セル内の指定した文字以降のみを削除という場合には
sushikiの中の指定する文字の位置を変えれば
できるものなのでしょうか?

>「ED」(半角の大文字)という文字列が判断材料と言う事でよろしいですか?
>'=============================================================
>Sub test()
>  Dim rng As Range
>  Dim myadd As String
>  Set rng = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
>  myadd = rng.Address
>  sushiki = "=if(iserror(FIND(""ED""," & myadd & "))," & _
>        "if(" & myadd & "="""",""""," & myadd & ")," & _
>        "MID(" & myadd & ",FIND(""ED""," & myadd & "),LEN(" & myadd & ")))"
>  Debug.Print sushiki '数式を確認して下さい
>  rng.Value = Evaluate(sushiki)
>End Sub
>
>上記のコードは、アクティブシートにA列に対して、
>「ED」以前の文字列を削除します。
>オーソドックスな方法は、どなたかの投稿があると思いますが、
>4000行ぐらいなら、こんな方法もあると言う事で・・・。

【21824】Re:セル内の指定した文字の前のみを削除
発言  ichinose  - 05/2/1(火) 10:35 -

引用なし
パスワード
   ▼みっちー さん:
おはようございます。
>
>下記のコードでうまく動作させることが
>できました。ありがとうございます。
>
>またまた質問で大変恐縮なのですが、
>セル内の指定した文字以降のみを削除という場合には
>sushikiの中の指定する文字の位置を変えれば
>できるものなのでしょうか?
投稿したコードは、「ED」より前の文字列を削除ですから、
「指定した文字以降のみを削除」となると、数式の変更が必要です。

以下のコードは、前回と同じ条件で「ED」以降を削除するコードです。

'=======================================================
Sub test()
  Dim rng As Range
  Dim myadd As String
  Set rng = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
  myadd = rng.Address
  sushiki = "=if(iserror(FIND(""ED""," & myadd & "))," & _
        "if(" & myadd & "="""",""""," & myadd & ")," & _
        "substitute(" & myadd & _
        ",MID(" & myadd & ",FIND(""ED""," & myadd & "),LEN(" & myadd & ")),""""))"
  Debug.Print sushiki '数式を確認して下さい
  rng.Value = Evaluate(sushiki)
End Sub

数式内の「ED」をパラメータ化にすれば、指定文字列で実行する事ができると
思います。
確認して下さい。


尚、何か問題があった場合、出かけてしまうので返信が夜になってしまいます。


>
>>「ED」(半角の大文字)という文字列が判断材料と言う事でよろしいですか?
>>'=============================================================
>>Sub test()
>>  Dim rng As Range
>>  Dim myadd As String
>>  Set rng = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
>>  myadd = rng.Address
>>  sushiki = "=if(iserror(FIND(""ED""," & myadd & "))," & _
>>        "if(" & myadd & "="""",""""," & myadd & ")," & _
>>        "MID(" & myadd & ",FIND(""ED""," & myadd & "),LEN(" & myadd & ")))"
>>  Debug.Print sushiki '数式を確認して下さい
>>  rng.Value = Evaluate(sushiki)
>>End Sub
>>
>>上記のコードは、アクティブシートにA列に対して、
>>「ED」以前の文字列を削除します。
>>オーソドックスな方法は、どなたかの投稿があると思いますが、
>>4000行ぐらいなら、こんな方法もあると言う事で・・・。

【21846】Re:セル内の指定した文字の前のみを削除
お礼  みっちー  - 05/2/1(火) 21:37 -

引用なし
パスワード
   ▼ichinose さん:

親切に教えていただきありがとうございました。
うまく動作することができました。


10438 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free