2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

【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