Wpis z mikrobloga

Excelowe świry, jak najprościej sprawdzić, czy komórki w danym zakresie zaczynają się od konkretnych znaków, i jeśli tak, to wywalić message box'a?

Próbuję takiego prostego kodu, ale nie działa:

Sub startswith()

If Left(Range("B12:B202").Value, 4) = "1111" Then
MsgBox "Text text", vbInformation,"Title"
End If

#excel #vba
  • 20
  • Odpowiedz
@JanKremovski: A to trzeba przejechać pętlą? Nie wystarczy, że jakoś tylko zadeklaruję zakres?

Ze zrobieniem pętli w pythonie to nie miałbym problemu, ale vba to inna sprawa xDDDD

W sensie, że coś takiego?

For Each i In Range("B12:B202")
If Left(i.Value, 4) = "1111" Then
MsgBox "Text text", vbInformation, Title
Next i
  • Odpowiedz
Dla sprawdzenia czy w danym zakresie istnieje taka wartość:

for x = 12 to 202
If Left(Range("B"&x),4)="1111" Then
MsgBox "Lubie Budyń"
exit for
end if
next x

Sprawdzenie i podanie w których komórkach jest taka wartość:

For x = 12 To 202
If Left(Range("B" & x), 4) = "1111" Then
mojstring = mojstring & "B" & x & ", "
End If
Next x
mojstring = Left(mojstring, Len(moj
  • Odpowiedz
@sartek: Jeśli chcesz wyświetlać MsgBox za każdym razem jak znajdzie komórkę z "1111":

Dim i As Range

For Each i In Range("B12:B202")
If Left(i, 4) = "1111" Then
MsgBox "Text text", vbInformation, Title
End If
Next i
  • Odpowiedz
via Android
  • 0
@Lubie_Budyn
@Mr_NiceGuy
@JanKremovski

Dzięki wielkie mireczki, sprawdzę to jak już będę z powrotem przy kompie.
Tylko, że trochę nie sprecyzowalem, bo nie chce sprawdzać tego przy uruchomieniu makra, tylko, żeby to działało w tle i msgbox wyskakiwał od razu, jeśli wprowadzona wartość zaczyna się od tego ciągu znaków.

To już chyba jednak nie przez Sub?
  • Odpowiedz
@sartek: @Mr_NiceGuy:

Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target
If Left(cell.Value, 4) = "1111" Then
cell.Interior.Color = vbRed
End If
Next cell
End Sub

Tak bym to widział. For each jest potrzebny na wypadek zmiany więcej niż jednej komórki na raz - inaczej użycie funkcji left() kończy się błędem. No i z tego samego powodu wstawiłem kolorowanie zamiast msgboxa, nie chciałbym się przez to wszystko przeklikiwać
  • Odpowiedz
via Android
  • 0
@Mr_NiceGuy
@croppz
Dzięki ziomeczki raz jeszcze ( ͡° ͜ʖ ͡°)
Więcej niż jedna komórka jednocześnie nie będzie zmieniana, bo to idzie przez walidację danych, i ten szeroki zakres to też trochę na wyrost, więc to akurat nie problem.
  • Odpowiedz
@croppz: @Mr_NiceGuy: Kurde, sorry za takię męczenie, ale mam już w tym arkuszy eventy przez worksheetchange, i już wcześniej żebym mógł mieć więcej niż jeden to dodałem Case, i te dwa wcześniejsze działały poprawnie, ale ten już mi nie działa niestety.

Mój kod to:

Private Sub Worksheet
Change(ByVal Target As Range)

Select Case Target.Address

Case "$E$7"
Kod

Case "$C$6"
Kod

Case "$B$12:$B$202"

For Each cell In Target
If Left(cell.Value,
  • Odpowiedz
@croppz: dzięki, właśnie w tej chwili znalazłem też coś takiego

If Not Intersect(Target, Range("$X$19:$X$42")) Is Nothing Then

użyte już po End Select, to już jakoś to powinienem ogarnąć teraz.
  • Odpowiedz
@sartek możesz to zrobić zwykłą funkcją tablicową i zliczyć ile takich wystąpień jest i np. wyświetlić w danej komórce ;) nie jest do tego potrzebne żadne makro ;)
  • Odpowiedz