• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Herhangi bir kelime ile başlayan satırı silme

  • Konbuyu başlatan Konbuyu başlatan ynrylmz
  • Başlangıç tarihi Başlangıç tarihi
Katılım
3 Ocak 2012
Mesajlar
8
Excel Vers. ve Dili
2010 tr
Merhaba,

(seçtiğimiz)Herhangi bir kelime ile başlayan satırı silmek için bir makro kodu yazılabilirmi acaba.
 
Evet, böyle bir makro yazmak mümkün. Sadece satır mı silinsin paragrafın tamamı mı? Ayrıca kelime makronun .çerisinde mi yer alacak... Örnek bir dosya ile ne istediğinizi anlatabilirseniz, daha hızlı ve doğru çözümler üretilebilir.
 
word dosyamda düz metinler ve tablolar bulunmakta, (dataları başka program ile alıp tablo ve metinlerden dosya oluşuyor) ben bu dosyada tablo içindeki xxx metinini buldurup bu metnin olduğu satırı sildirmek istiyorum.(yani hem metni ve satırı sildirmek) Forumlardan istediğim xxx kelimesini bulup satır içinden sildirdim fakat satırı silemiyorum.Ayrıca her word açılışında(autoopen gibi) dosyası tarayıp bu metin var ise otomatik silmeside varsa çok süper olur.
Bu konuda yardımcı olabilirmisiniz.

Sub Auto_open()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "xxx"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
End With
Selection.Find.Execute

If Selection.Text = "xxx" Then
Do While krk = 0
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
krk = Selection.Range.ComputeStatistics(Statistic:=wdStatisticCharacters)
If krk = 0 Then Selection.TypeBackspace
Loop
Selection.MoveUp Unit:=wdParagraph, Count:=1, Extend:=wdExtend
Selection.Delete
Selection.MoveDown Unit:=wdParagraph, Count:=2, Extend:=wdExtend
Selection.Delete
End If
End Sub
 
Evet, böyle bir makro yazmak mümkün. Sadece satır mı silinsin paragrafın tamamı mı? Ayrıca kelime makronun .çerisinde mi yer alacak... Örnek bir dosya ile ne istediğinizi anlatabilirseniz, daha hızlı ve doğru çözümler üretilebilir.
Tablo içindeki xxx metinini buldurup bu metnin olduğu satırı sildirmek istiyorum.(yani hem metni ve satırı sildirmek)
 
Selamlar,
Örnek dosya olsa daha kesin kodlar üretilebilir. Aşağıdaki kod işinizi çözer diye tahmin ediyorum.
PHP:
Sub Makro1()
Aranan = "xxxx"
For x = 1 To ActiveDocument.Tables.Count
For y = ActiveDocument.Tables(x).Rows.Count To 1 Step -1
If InStr(1, ActiveDocument.Tables(x).Rows(y).Range, Aranan, vbTextCompare) > 0 Then
ActiveDocument.Tables(x).Rows(y).Delete
say = say + 1
End If
Next
Next
MsgBox say & " satır başarıyla silindi.", vbOKOnly, "l e u m r u k"
 
Selamlar,
Örnek dosya olsa daha kesin kodlar üretilebilir. Aşağıdaki kod işinizi çözer diye tahmin ediyorum.
PHP:
Sub Makro1()
Aranan = "xxxx"
For x = 1 To ActiveDocument.Tables.Count
For y = ActiveDocument.Tables(x).Rows.Count To 1 Step -1
If InStr(1, ActiveDocument.Tables(x).Rows(y).Range, Aranan, vbTextCompare) > 0 Then
ActiveDocument.Tables(x).Rows(y).Delete
say = say + 1
End If
Next
Next
MsgBox say & " satır başarıyla silindi.", vbOKOnly, "l e u m r u k"

Tekrar Selamlar, bu kodlar ile compile error: değişken tanımı ile hata veriyor, örnek dosyayı makro ekleyip linki paylaşıyorum. (metin bul ve satır sil.docm)

https://www.dosyaupload.com/booK

Şimdiden desteğiniz için teşekkür ederim.
 
Kodu eklediğiniz modülün başındaki
Kod:
Option Explicit
satırını silip deneyiniz.
 
Kodu eklediğiniz modülün başındaki
Kod:
Option Explicit
satırını silip deneyiniz.
Sayın Leumruk, çok teşekkür ederim kodlar çalıştı tam istediğim gibi, emeğinize bilginize sağlık; ilave olarak aynı dosyada yine tablo içindeki "yyyy", "zzz" metinlerinede aynı işlemi yaptırabilirmiyiz? (aranan1, aranan2, aranan3 gibi..
 
Son düzenleme:
Sayın Leumruk, çok teşekkür ederim kodlar çalıştı tam istediğim gibi, emeğinize bilginize sağlık; ilave olarak aynı dosyada yine tablo içindeki "yyyy", "zzz" metinlerinede aynı işlemi yaptırabilirmiyiz? (aranan1, aranan2, aranan3 gibi..
Aranan kısmına istediğiniz kadar veri ekleyebilirsiniz.
C++:
Aranan = Array("xxx", "yyy", "zzz", "ddd")
For i = 0 To UBound(Aranan)
For x = 1 To ActiveDocument.Tables.Count
For y = ActiveDocument.Tables(x).Rows.Count To 1 Step -1
If InStr(1, ActiveDocument.Tables(x).Rows(y).Range, Aranan(i), vbTextCompare) > 0 Then
ActiveDocument.Tables(x).Rows(y).Delete
say = say + 1
End If
Next
Next
Next
 
Aranan kısmına istediğiniz kadar veri ekleyebilirsiniz.
C++:
Aranan = Array("xxx", "yyy", "zzz", "ddd")
For i = 0 To UBound(Aranan)
For x = 1 To ActiveDocument.Tables.Count
For y = ActiveDocument.Tables(x).Rows.Count To 1 Step -1
If InStr(1, ActiveDocument.Tables(x).Rows(y).Range, Aranan(i), vbTextCompare) > 0 Then
ActiveDocument.Tables(x).Rows(y).Delete
say = say + 1
End If
Next
Next
Next

Tekrar merhaba; belirttiğin gibi yaptım, aranan1 leri sildi ve aşağıdaki gibi hata verdi(aranan2 ve 3 silinmedi)

5991: hatası veriyor,
Tabloda dikey olarak birleştirilmiş hücreler bulunduğu için bu gurup içindeki özel satırlara erişilemiyor.)

If InStr(1, ActiveDocument.Tables(x).Rows(y).Range, Aranan(i), vbTextCompare) > 0 Then (bu satırda, debugda kalıyor)
 
Elinizdeki dosyayla uyumlu örnek dosya ekleyiniz.
 
Dosya linkine ulaşamadım. Sorun sanırım dikey birleştirilmiş hücrelerden kaynaklanıyor. Kod oluşturmadan önce birleştirilmiş hücrede aranan metin varsa metnin bağlı bulunduğu en üst satır mı silinecek, yoksa birleştirilmiş hücrenin dahil olduğu tüm satırlar mı silinecek? Örneğin 2,3 ve 4. satırın dahil olduğu birleştirilmiş bir hücrede metni aradığımızda bize 2. satırı verecektir. Sadece 2. satırın mı silinmesi gerekiyor, tamamının mı?
 
Dosya linkine ulaşamadım. Sorun sanırım dikey birleştirilmiş hücrelerden kaynaklanıyor. Kod oluşturmadan önce birleştirilmiş hücrede aranan metin varsa metnin bağlı bulunduğu en üst satır mı silinecek, yoksa birleştirilmiş hücrenin dahil olduğu tüm satırlar mı silinecek? Örneğin 2,3 ve 4. satırın dahil olduğu birleştirilmiş bir hücrede metni aradığımızda bize 2. satırı verecektir. Sadece 2. satırın mı silinmesi gerekiyor, tamamının mı?
Tekrar merhaba; ilgi ve detaylar için tekrar teşekkürlerimi sunarım.Belirttiğin gibi dikey birleştirilmiş hücrelerden dolayı hata veriyor. (test için onları kaldırdım, makro sorunsuz çalışıyor) Çalışma dosyamda hem dikey hemde yatay tablolar var, bu nedenle ayıramıyorum. Bulunan kelimenin bulunduğu satırın silinmesi (yatay olarak o satırı komple kaldırmak) Aslında dikey birleştirilmiş hürelerde aranacak kelimeler hiç olmayacak.(dikey birleştirilmiş hücreleri pas geç diyebilirmiyiz)

Tekrar teşekkürler.
 
C++:
Aranan = Array("xxx", "yyy", "zzz", "ddd")
For i = 0 To UBound(Aranan)
For x = 1 To ActiveDocument.Tables.Count
  Set mtn = ActiveDocument.Tables(x).Range
  With mtn.Find
    .Text = Aranan(i)
    While .Execute
      mtn.Rows.Delete
      say = say + 1
    Wend
  End With
Next
Next
MsgBox say & " satır başarıyla silindi.", vbOKOnly, "l e u m r u k"
End Sub
 
C++:
Aranan = Array("xxx", "yyy", "zzz", "ddd")
For i = 0 To UBound(Aranan)
For x = 1 To ActiveDocument.Tables.Count
  Set mtn = ActiveDocument.Tables(x).Range
  With mtn.Find
    .Text = Aranan(i)
    While .Execute
      mtn.Rows.Delete
      say = say + 1
    Wend
  End With
Next
Next
MsgBox say & " satır başarıyla silindi.", vbOKOnly, "l e u m r u k"
End Sub
Eline emeğine, klaveyene sağlık :) son olarak bu makroyu klavyede tuş kombinasyonu ile (örn: ctrl+Q) çalıştırma yapabilirmiyiz?
 
Arkadaşlar ilgimi çekti; Aranan = Array("xxx", "yyy", "zzz", "ddd") Bu bölümü excelin herhangi bir sayfasından liste aralığı olarak gösterebilir miyiz? Yani 40-50 satırlık bir liste olsa acaba macro ile belirleyebilir miyiz?
 
Eline emeğine, klaveyene sağlık :) son olarak bu makroyu klavyede tuş kombinasyonu ile (örn: ctrl+Q) çalıştırma yapabilirmiyiz?
  1. Microsoft Office Düğmesi'ne. ...
  2. Özelleştir'e tıklayın.
  3. Klavye kısayolları'nın yanında Özelleştir'e tıklayın.
  4. Kategoriler listesinde Makrolar'a tıklayın.
  5. Makrolar listesinde, değiştirmek istediğiniz makroya tıklayın.
  6. Yeni kısayol tuşuna basın kutusunda, seçmek istediğiniz tuş bileşimini yazın.
 
Arkadaşlar ilgimi çekti; Aranan = Array("xxx", "yyy", "zzz", "ddd") Bu bölümü excelin herhangi bir sayfasından liste aralığı olarak gösterebilir miyiz? Yani 40-50 satırlık bir liste olsa acaba macro ile belirleyebilir miyiz?
C++:
Set Aranan = Range("a1:a50")
MsgBox Aranan(5)
 
Geri
Üst