Wątek przeniesiony 2021-09-16 10:17 z Inne języki programowania przez cerrato.

EXCEL VBA KOD

0

Witam,

Potrzebuję porady jak zmienić kod by makro zmieniało dane po lewej stronie na formę jak po prawej:
Kolumn z danymi jest dużo więcej ale to już chyba bez różnicy.

screenshot-20170818124421.png

Sub Makro1()
'
' Makro1 Makro
'
'
Dim i As Integer
Dim x As Integer
Dim y As Integer

i = 1
' If Range("B" & i).Value = "" Then
' i = i + 1
'Else
'For i = 1 To 50
'If Range("B" & i).Value = "" Then
'i = i + 1
'Next i
'Else
x = Range("B" & i).Value
'MsgBox "X to " & x
For y = 1 To x
Range("B" & i).Value = "a"
i = i + 1
Next y
'End If

End Sub
0

Czego nie rozumiesz? Co ci nie działa? Czemu kod jest niesformatowany? Czy widzisz w ogóle, że połowa kodu jest wykomentowana...?

0

Właśnie nad tą górną częścią kodu myślę, dolna funkcja rozbija liczby dla prawidłowo zdefiniowanej zmiennej i.

0

Warto podać jakie są zasady zmiany, które ma wykonać makro.

0

Makro idąc od komórki B1 do B100 po napotkaniu liczby w którejś komórce powinno zmienić ją na litery a jak na obrazku. Po dojściu do B100 powinno przechodzić do kolumny C i tak dalej do komórki z100.

0

Propozycja rozwiązania problemu do ewentualnych modyfikacji:

Option Explicit

Sub CyfryNaLitery()
Dim i As Integer
Dim k As Integer

'wylacza odswiezanie ekranu
Application.ScreenUpdating = False

'Ustawienie na A1
ActiveSheet.Range("A1").Select

'Wartosc poczatkowa wiersza
i = 0

'Petla dziala do momentu jak kolumn A nie jest pusta
Do Until Len(ActiveCell.Offset(i, 0).Value) = 0
    
    'Umieszczenie daty wiersza
    ActiveCell.Offset(i, 6).Value = ActiveCell.Offset(i, 0).Value
    
    'Po kolei dla kolumn B,C,D
    For k = 1 To 3
        'Sprawdzamy czy jest wartosc i czy jest cyfra
        If Len(ActiveCell.Offset(i, k).Value) > 0 And IsNumeric(ActiveCell.Offset(i, k).Value) Then
            'Jesli tak to umieszczamy wartosc a
            ActiveCell.Offset(i, k + 6).Value = "a"
        End If
    Next

    i = i + 1
Loop

'wlacza odswiezanie ekranu
Application.ScreenUpdating = True
End Sub

0

Dzięki za podpowiedź, jednak nie o to mi chodziło. Kolumna A nie powinna być kopiowana do kolumny G, mają być tylko zamieniony liczby na określoną liczbę literek "a"

0

Już prawie sobie poradziłem, także dzięki:)

' Makro1 Makro
''MsgBox "X to " & x
'
Dim i As Integer
Dim x As Integer
Dim y As Integer
Dim a As Integer




i = 1

For a = 1 To 100

If Range("B" & i).Value = "" Then
i = i + 1
Else
x = Range("B" & i).Value

For y = 1 To x
Range("B" & i).Value = "a"
i = i + 1

Next y

End If

Next a


End Sub

1 użytkowników online, w tym zalogowanych: 0, gości: 1