■ このスレッドは過去ログ倉庫に格納されています
【Excel】 特定の文字列のある行を削除するマクロを作りたい。VBA知ってる人来てください。
- 1 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:22:15.58 ID:Dp3/g2qX0.net
- 検索したら
Sub test01()
Dim x As String, c As Range
x = InputBox("削除する文字を入力")
With ActiveSheet.UsedRange
Do While (1)
Set c = .Find(What:=x, LookIn:=xlValues, LookAt:=xlPart)
If c Is Nothing Then Exit Do
c.EntireRow.Delete
Loop
End With
End Sub
というマクロがヒットした。
削除したい文字列が決まっているので、入力する必要が無いマクロに改造した。
今回は"白"という文字列が入っている行を削除したい。
Sub test01()
Do While (1)
Set c = .Find(What:=白, LookIn:=xlValues, LookAt:=xlPart)
If c Is Nothing Then Exit Do
c.EntireRow.Delete
Loop
End Sub
エラーが出た。
どうしたらいいの?
- 2 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:24:53.78 ID:iZqS6Z2h0.net
- 中学生かよ
3行目をよく見ろ
- 3 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:27:35.14 ID:Dp3/g2qX0.net
- >>2
Set c = .Find(What:=白, LookIn:=xlValues, LookAt:=xlPart)
この行?
Set c = .Find(What:=白, LookIn:=白lValues, LookAt:=白lPart)
ひょっとしてこうかなと思ったけどやっぱりだめだった
xを特定の文字に変えるだけじゃだめなの?
- 4 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:28:01.67 ID:2VTHYsqi0.net
- ダブルクォーテーションがないから?
- 5 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:28:44.38 ID:zKumefYy0.net
- SASなら一行
- 6 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:29:13.25 ID:jfphlmLx0.net
- >>1のコードをおもちゃにして遊んだら楽しいのに
- 7 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:31:27.29 ID:Dp3/g2qX0.net
- >>4
Set c = .Find(What:="白", LookIn:="白"lValues, LookAt:="白"lPart)
駄目だったよ
- 8 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:33:09.21 ID:YK/p5/RXI.net
- これって難易度的にVBAのなかではどんなもんなの?
- 9 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:34:43.28 ID:2VTHYsqi0.net
- 全然わかってねぇwwwww
- 10 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:34:53.93 ID:Dp3/g2qX0.net
- >>8
多分初歩じゃない?
今勉強中だし。
dim cで変数を定義しているのに、消しちゃったのがまずいのかな
- 11 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:36:12.24 ID:Dp3/g2qX0.net
- できた!!
Sub test01()
Dim x As String, c As Range
x = "白"
With ActiveSheet.UsedRange
Do While (1)
Set c = .Find(What:=x, LookIn:=xlValues, LookAt:=xlPart)
If c Is Nothing Then Exit Do
c.EntireRow.Delete
Loop
End With
End Sub
でももっと簡潔にできないかな
- 12 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:37:09.89 ID:9Z1/LmZV0.net
- マクロやったことないけどお前の作ったのどこでcの定義してるん?
- 13 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:37:28.95 ID:YK/p5/RXI.net
- >>10 サラリーマン?勉強してから何ヶ月くらい?
- 14 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:40:22.64 ID:Dp3/g2qX0.net
- >>12
Set c がひとまとめの命令かと思ってた
>>13
違います
勉強して3日くらい
- 15 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:41:12.96 ID:LV7UOGDa0.net
- findのプロパティってそんなに必要ない気がする
- 16 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:41:15.80 ID:YK/p5/RXI.net
- でも3日でそれならすごくないか?
本見ながら独学で?
- 17 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:45:00.24 ID:Dp3/g2qX0.net
- >>5
SASってイギリスの特殊部隊しか知らないけど、何かプログラミング言語?
>>16
C言語を挫折経験あるから
>>15
find関数自体知らないんだけど、検索しないと探せないんじゃないの?
- 18 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:46:27.94 ID:YK/p5/RXI.net
- やっぱプログラミング経験者かー
道理で
- 19 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:47:44.68 ID:9Z1/LmZV0.net
- 亀レス過ぎた死にたい
- 20 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:50:51.37 ID:Dp3/g2qX0.net
- >>19
いや、考えの補強ができたぜ
もっと簡潔に書きたいから、何か方法があれば教えてくれ
- 21 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:51:11.46 ID:LV7UOGDa0.net
- >>17
どんなプロパティか覚えてないけどwhat岳でいいと思う
- 22 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:54:42.46 ID:LV7UOGDa0.net
- もっと簡単なのできたよ
dim a as range
for each a in range(a1:a100)
if a.value = "白"
a.entirerow.delete
end if
next
大文字小文字は気にしないでくれ
- 23 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 12:59:41.45 ID:Dp3/g2qX0.net
- >>22
エラーが出てしまいましたぞ
for each a in range(a1:a100)
デバッグのこともよくわからないけど、ここのところが何かあるっぽい
- 24 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:01:45.92 ID:LV7UOGDa0.net
- >>23
ごめんダブルクォート忘れてた
あとif の後ろにthenが入ってない
- 25 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:03:34.81 ID:Dp3/g2qX0.net
- >>24
白には入ってるけど、他にダブルクォーテーション入れるところってどこ?
- 26 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:05:10.67 ID:LV7UOGDa0.net
- for each a in range("a1:a100")
ここね。セルのこの部分だけを見るようになってるから必要であれば広げればいい
- 27 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:11:19.11 ID:Dp3/g2qX0.net
- >>26
アドレスって文字列扱いなんか
アドレスを指定するのが面倒な気がするんだけど、指定せずに書くことはできる?
- 28 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:23:14.14 ID:LV7UOGDa0.net
- range("a1:a100")をcellsにすると全部見てくれるけど
処理がくっそおそくなるからだめだな
- 29 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:26:02.70 ID:LV7UOGDa0.net
- usedrangeに変えたらできたわ
ってかusedrangeって初めて知った
- 30 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:32:30.68 ID:Dp3/g2qX0.net
- Cellにしたらまだ終わらない
全検索なんか
- 31 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:35:47.25 ID:Dp3/g2qX0.net
- やっと終わったからUsedRangeってのを試したいんだけど、
Sub test01()
Dim a As Range
For Each a In UsedRange
If a.Value = "白" Then
a.EntireRow.Delete
End If
Next
End Sub
書き換えるだけじゃだめ?
- 32 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:36:43.52 ID:EsF8vunC0.net
- わざわざマクロつくらんでもフィルター → 削除で一発やん
- 33 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:38:03.59 ID:LV7UOGDa0.net
- >>31
>>29
- 34 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:40:42.11 ID:Dp3/g2qX0.net
- >>33
それだけじゃよくわからんですよ
- 35 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:43:51.31 ID:LV7UOGDa0.net
- >>34
>>31でやったらうまく動いたよ
- 36 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:46:47.35 ID:Dp3/g2qX0.net
- >>31のだと
For Each a In UsedRange
の部分がエラーっぽいんだけど、なんでだろ
Excelのバージョン違いとかあるかな
Excel2003なんだけど
- 37 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:54:58.99 ID:Dp3/g2qX0.net
- できた
For Each a In ActiveSheet.UsedRange
シート名を指定しないといけなかったみたいだな
- 38 :以下、\(^o^)/でVIPがお送りします:2014/09/14(日) 13:56:01.32 ID:LV7UOGDa0.net
- 2013ならできるな。ググってみたけどわからん
総レス数 38
10 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver.24052200