Excel - Usporedi stupac A i B daje rezultate u stupcu C
Problem
Imam podatke u stupcu A i B koji pokriva do 55000 stupaca ponekad samo 144 stupca, što izgleda ovako:
AB (C rezultat) 2 ZZ, A, Q 3 PP, V 4 WW 2 A - 2 Q - 3 V - 1 DD
Ovdje prvo potražite col: A prvi broj je "2" iu stupcu: B ima "Z", "A" & "Q" pa je rezultat Z, A, Q jedna od najvažnijih stvari ovdje je ostatak "2" u stupcu: A treba prikazati prazno.
Rješenje 1
Ovo je prva makronaredba koju možete koristiti:
Sub test () Dim accountName, lastRow, writeInCell, repeatTimes lastRow = Raspon ("B1") Kraj (xlDown) .Row Sheets (1) .Odaberite Za i = 2 Do lastRow writeInCell = i Range ("B" & i) .Select accountName = Raspon ("B" & i) .Vrijednost If (Raspon ("C" & i) .Vrijednost "") Zatim repeatTimes = CInt (Raspon ("C" & i) .Vrijednost) Kraj Ako je ponovljenoTimes> 1 Onda accountName = WorksheetFunction.Rept (accountName & ", ", repeatTimes) Kraj Ako j = i + 1 accountName = Trim (accountName) If (Right (accountName, 1) = ", ") Onda accountName = Left (accountName, Len (accountName) - 1) Završi ako je (i lastRow) tada učinite do ActiveCell.Offset (1, -1) .Value repeatTimes = 0 If (Raspon ("C" & j) .Vrijednost "") Zatim repeatTimes = CInt (Raspon ("C" & j) .Vrijednost) Kraj Ako je ponovljenoTimes> 0 Zatim accountName = Trim (accountName) If (Desno (accountName, 1) = ", ") Onda accountName = accountName & WorksheetFunction.Rept (Raspon ( "B" & j) .Vrijednost & ", ", repeatTimes) Inače accountName = accountName & ", " & WorksheetFunction.Rept (raspon ("B" & j) .Vrijednost & ", ", repeatTimes) Završi ako se završi ako Ac tiveCell.Offset (1, 0). Odaberi i = i + 1 j = i + 1 Kraj petlje Ako accountName = Trim (accountName) Ako (Desno (accountName, 1) = ", ") Onda accountName = Lijevo (accountName, Len (accountName) - 1) Završi ako accountName = Zamijeni (accountName, ", ", ", ") Raspon ("D" & writeInCell) .Value = accountName accountName = "" repeatTimes = 0 Sljedeći i Range ("A1"). Odaberite End Sub
Rješenje 2
Još jedna makronaredba:
Sub test () Dim accountName, lastRow, writeInCell lastRow = Raspon ("B1"). Kraj (xlDown) .Row Sheets (1) .Odaberite Za i = 2 Do lastRow writeInCell = i accountName = Raspon ("B" & i) .Value Range ("B" & i) .Odaberite Ako (i lastRow) onda Do Do ActiveCell.Offset (1, -1) .Vrijednost "" accountName = accountName & ", " & ActiveCell.Offset (1, 0). Vrijednost ActiveCell.Offset (1, 0). Odaberite i = i + 1 kraj petlje ako je raspon ("C" & writeInCell) .Value = accountName
Rješenje 3
- 1. Stvorite mapu u pogonu za lakši pristup, npr. C :. (Imenujte nešto povezano s Upravljačkom pločom, npr. Korisnici.)
- 2. Stvorite novu datoteku u Notepadu i kopirajte i zalijepite sljedeće u nju:
korisnika korisnika {21EC2020-3AEA-1069-A2DD-08002B30309D}
- 3. Zamijenite "Users" s nazivom mape koju ste stvorili i spremite je kao loc.bat.
(Sada biste trebali moći vidjeti svoju mapu i datoteku loc.bat, s loc.bat u istom direktoriju kao i mapa Ne u njoj.)
- 4. Sada desnom tipkom miša kliknite i stvorite drugu tekstualnu datoteku. Kopirajte i zalijepite sljedeće u njega:
korisnici. {21EC2020-3AEA-1069-A2DD-08002B30309D} Korisnici
(Svakako zamijenite riječ "Korisnici" nazivom mape.)
- 5. Spremite ga kao key.bat.
- 6. Sada biste trebali vidjeti datoteke loc.bat i key.bat u istom direktoriju kao i mapa koju ste stvorili.
- 7. Sada, sve što trebate učiniti je dvaput klik na loc.bat datoteku i mapa bi trebala imati ikonu koja izgleda kao upravljačka ploča. Ako kliknete na mapu, ona će vas preusmjeriti na Upravljačku ploču i time zaključati mapu.
- 8. Naravno, da biste ga otključali, jednostavno dvaput kliknite na datoteku key.bat i mapa bi se trebala vratiti u mapu koju ste najprije stvorili.
Bilješka
Zahvaljujući Navaneeth za ovaj savjet na forumu.