Excel VBA質問箱 IV

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

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


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

【61359】セル内から特定の文字を削除する(replace) Hoppy 09/5/4(月) 7:59 質問[未読]
【61360】Re:セル内から特定の文字を削除する(repl... Hirofumi 09/5/4(月) 9:23 回答[未読]
【61363】Re:セル内から特定の文字を削除する(repl... Hoppy 09/5/4(月) 13:58 お礼[未読]
【61361】Re:セル内から特定の文字を削除する(repl... かみちゃん 09/5/4(月) 9:38 発言[未読]
【61364】Re:セル内から特定の文字を削除する(repl... Hoppy 09/5/4(月) 14:13 お礼[未読]
【61378】Re:セル内から特定の文字を削除する(repl... Hoppy 09/5/5(火) 7:41 お礼[未読]
【61362】Re:セル内から特定の文字を削除する(repl... ゆみこん 09/5/4(月) 12:22 発言[未読]
【61365】Re:セル内から特定の文字を削除する(repl... Hoppy 09/5/4(月) 14:18 お礼[未読]
【61379】Re:セル内から特定の文字を削除する(repl... りん 09/5/5(火) 8:47 発言[未読]
【61397】Re:セル内から特定の文字を削除する(repl... Hoppy 09/5/5(火) 22:56 お礼[未読]

【61359】セル内から特定の文字を削除する(repla...
質問  Hoppy  - 09/5/4(月) 7:59 -

引用なし
パスワード
   A列にはお店の名前、B列には県名(新潟県、滋賀県、福井県、神奈川県のいずれか)が入ったリストがあります。これを元に色々と加工する中で”県”が非常に邪魔になって、なんとか”県”だけを消したいのですが、初心者ゆえ思うように行きません。
色々トライするも、コンパイルの時点ですでにエラーです。
初歩的なことですが教えていただけませんでしょうか。

タイトル行を検索し、そこから下に処理をしています(つもりです、、)。

Sub Del_KEN()
  Dim intYLine As Integer
  Dim intXLine As Integer

  intYLine = Worksheets("data").Cells.Find("県名").Row
  intXLine = Worksheets("data").Cells.Find("県名").Column
  
  Do While intYLine < 1500
    intYLine = lngYLine + 1
    Replace(Cells(intYLine,intXLine),"県","")
  Loop
End Sub

【61360】Re:セル内から特定の文字を削除する(re...
回答  Hirofumi  - 09/5/4(月) 9:23 -

引用なし
パスワード
   こんなのでも善いかも

Option Explicit

Public Sub Sample()

  Dim i As Long
  Dim lngRows As Long
  Dim rngList As Range
  Dim vntData As Variant
  Dim strProm As String
  
  '◆"県名"の在るセルを探しそれを基準とする(列見出しのセル位置)
  Set rngList = ActiveSheet.Cells.Find(What:="県名", LookIn:=xlValues, LookAt:=xlWhole)
  '該当セルが無ければ終了
  If rngList Is Nothing Then
    strProm = "該当セルが有りません"
    GoTo Wayout
  End If
  
  With rngList
    '行数の取得
    lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row
    If lngRows <= 0 Then
      strProm = "データが有りません"
      GoTo Wayout
    End If
    '列データを配列に取得
    vntData = .Offset(1).Resize(lngRows + 1).Value
  End With
  
  '列に就いて繰り返し
  For i = 1 To lngRows
    '"県"を ""に置き換え
    vntData(i, 1) = Replace(vntData(i, 1), "県", "", , , vbBinaryCompare)
  Next i
  
  '画面更新を停止
  Application.ScreenUpdating = False
  
  '結果出力
  rngList.Offset(1).Resize(lngRows).Value = vntData
  
  strProm = "処理が完了しました"
   
Wayout:

  '画面更新を再開
  Application.ScreenUpdating = True
  
  Set rngList = Nothing
   
  MsgBox strProm, vbInformation
     
End Sub

【61361】Re:セル内から特定の文字を削除する(re...
発言  かみちゃん  - 09/5/4(月) 9:38 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>色々トライするも、コンパイルの時点ですでにエラーです。

 Replace(Cells(intYLine,intXLine),"県","")
のコードでエラーになるのですか?
    Cells(intYLine, intXLine).Value = Replace(Cells(intYLine, intXLine).Value, "県", "")
とすればいいのではないでしょうか?

>  intYLine = Worksheets("data").Cells.Find("県名").Row
>  intXLine = Worksheets("data").Cells.Find("県名").Column

の値が正しく取得できているのかは、疑問があります。
シートレイアウトがよくわかりませんので、
「県名」という文字列を含まれているセルを検索しているのですが、それでいいのでしょうか?
県名がB列と決まっているならば、あまり、意味がないように思います。

また、Excelのバージョンにもよりますが、
Dim intYLine As Integer
Dim intXLine As Integer
のデータ型は、特に行番号の場合は、Longにしておいたほうがいいです。
32767行を超えると、オーバーフローのエラーになります。
そんなにたくさんの行は、絶対使わないから、Integerをあえて、使っているのであれば、
お任せしますが・・・

【61362】Re:セル内から特定の文字を削除する(re...
発言  ゆみこん  - 09/5/4(月) 12:22 -

引用なし
パスワード
   今回以降”県”が必要ないのなら、ツールバーの
「編集」−「置換」で”県”をなくしてしまうとかでも
良いような・・・・気もします。

【61363】Re:セル内から特定の文字を削除する(re...
お礼  Hoppy  - 09/5/4(月) 13:58 -

引用なし
パスワード
   Hirofumiさん、ありがとうございます。カンペキでした。
しかし、これだけの処理に随分とソースがいるんですね。甘かったです。
まだ全ては把握していませんが、ソースを調べてマスターします。
早々の回答ありがとうございました。

【61364】Re:セル内から特定の文字を削除する(re...
お礼  Hoppy  - 09/5/4(月) 14:13 -

引用なし
パスワード
   ▼かみちゃん さん:
>Replace(Cells(intYLine,intXLine),"県","")のコードでエラーになるのですか?
そうなんですよ。Replaceの使い方が違っているのは薄々気付いたものの、そう修正すれば良いかどうしてもわからなかったんです。

>Cells(intYLine, intXLine).Value = Replace(Cells(intYLine,intXLine).Value, "県", "")
>とすればいいのではないでしょうか?
うまく出来ませんでした。私がどこか間違えているんだと思います。

>県名がB列と決まっているならば、あまり、意味がないように思います。
列は決まっているんですが、何行目からかは確定的でないのでとりあえずタイトル行を探してみました^^;

>そんなにたくさんの行は、絶対使わないから、Integerをあえて、使っているのであれば、お任せしますが・・・
最初はlongにしていましたが、エラーが出るたび色々変えていたらintになってました。勿論、汎用性を考えてlongにすべきですね。

早々の回答ありがとうございました。
勉強になります。

【61365】Re:セル内から特定の文字を削除する(re...
お礼  Hoppy  - 09/5/4(月) 14:18 -

引用なし
パスワード
   毎回”県”が入っているデータをコピーして使用しています。
毎回毎回置換するよりもマクロで一発の方がかっこいいかなと思って^^;
でも今の私には労力かかりすぎです!T_T
回答ありがとうございました。

【61378】Re:セル内から特定の文字を削除する(re...
お礼  Hoppy  - 09/5/5(火) 7:41 -

引用なし
パスワード
   ▼かみちゃん さん:
良く見ると途中で変数名が変わっており、ループを抜け出せなくなっていました。かみちゃんさんのコードで出来ました。ありがとうございました。

【61379】Re:セル内から特定の文字を削除する(re...
発言  りん E-MAIL  - 09/5/5(火) 8:47 -

引用なし
パスワード
   Hoppy さん、おはようございます。

解決済みのようですが、

>毎回毎回置換するよりもマクロで一発の方がかっこいいかなと思って^^;
>でも今の私には労力かかりすぎです!T_T
>回答ありがとうございました。

県を置換するマクロで一発解決では?
Sub Test()
  With Application.ActiveSheet.Columns("B:B")
   .Replace What:="県", Replacement:="", LookAt:=xlPart
  End With
End Sub

【61397】Re:セル内から特定の文字を削除する(re...
お礼  Hoppy  - 09/5/5(火) 22:56 -

引用なし
パスワード
   ▼りん さん:
なんてシンプルなソース、美しい。
本を買うよりも本当に勉強になります。
必要なことでないと頭に入らないですからね。
ありがとうございます。

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