FAQ |
Lista utenti |
Gruppi sociali |
Calendario |
Cerca |
Messaggi odierni |
|
|
LinkBack | Strumenti della discussione | Modalità di visualizzazione |
|
|||
Macro per scorrere e analizzare colonna contenente indirizzi internet
Macro per scorrere e analizzare colonna contenente indirizzi internet
Salve,
è tanto che rimando l'analisi di questo difficile problema Excel, ma ora sono deciso nel trovarne la soluzione, se possibile. Dunque, possiedo un foglio di calcolo con in colonna C un elenco di link internet in ordine alfabetico (con indirizzo completo di http) ed in D, E, F, dei dati che però non ci interessano: ci interessa solo sapere quando nella colonna D vi è una cella vuota. Infatti io dovrei creare una macro che scorra tutta la colonna D e intervenga quando trova una cella vuota. Quando la trova supponiamo in D8, deve controllare se la cella C7 e C9 possiede lo stesso dominio della cella C8 (che sarà quindi affiancata alla D8). Per stesso dominio, si intende un indirizzo web fino al primo slash ( / ) ed il resto non conta. (NB: non il doppio slash// ma solo il singolo/) Ad esempio questi vanno considerati tutti uguali perchè possiedono la stessa radice http://www.excel.com/ codice:
http://www.excel.com/newthread.php http://www.excel.com/index.html http://www.excel.com/office/index.html codice:
http://www.word.com/newthread.php http://www.new.excel.com/index.html http://www.excel.it/office/index.html Una volta fatto questo, poniamo che l'indirizzo in C7 sia uguale a C8, deve semplicemente copiare le 3 celle D7:F7 in D8:F8. (Potrebbe essere uguali tutti e 3 i C7, C8 e C9 ma sarebbe indifferente quale copiare, basta che non dia errore la funzione). Se invece l'indirizzo C8 non fosse uguale a nient'altro, basterebbe far proseguire la macro senza fare niente fino alla prossima cella vuota, e così via fino alla fine. Come ultima complicazione, le celle vuote potrebbero anche essere 2 o più attaccate: in questo caso bisogna prima eliminare i doppioni controllando sempre il dominio seguendo il sistema di prima. Lo so, è un casino e andrebbe fatto un passo alla volta, solo che il foglio è già pieno di formule e altre macro (che non ho creato io...) e quindi sarebbe un problema andare a spostare le colonne o aggiungerne, perchè dopo potrebbe non funzionare qualcos'altro. Non so bene quanto possa essere difficile per un buon programmatore, ma confido che un guru possa risolvere la questione con poche righe di codice. Gliene sarei tanto grato...! Grazie mille |
|
|||
Non ho capito bene come vuoi copiare i valori, ma ti consiglierei di fare tutto in un foglio esterno collegato per non spostare niente. Scrivendo macro faresti una cosa ancora più complicata di difficile mantenimento.
Le funzioni che ti servono sono sicuramente tra quelle di testo:
|
|
|||
Quote:
Devo fare per forza una macro che quando viene lanciata fa solo quello e nient'altro. Grazie comunque |
|
|||
Bene, alla fine grazie ai gruppi ufficiali usenet sono riuscito a risolvere così:
codice:
Public Sub CercaVuoteSopra() 'trova le vuote nell'intervallo Dim rngIn As Range Set rngIn = Range(Range("A1"), Range("A1").End(xlDown)).Offset(, 3) Dim rngVuota As Range With rngIn For i = 1 To rngIn.Cells.Count Set rngVuota = rngIn.Cells(i).Find(What:="", _ SearchOrder:=xlByRows, SearchDirection:=xlNext) If Not rngVuota Is Nothing Then rngVuota.Select If GetDomain(rngVuota.Offset(0, -1)) = GetDomain(rngVuota.Offset(-1, -1)) Then ActiveCell.Offset(-1, 0).Range("A1:C1").Select Application.CutCopyMode = False Selection.Copy ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste End If: End If Next i End With Set rngIn = Nothing Set rngVuota = Nothing End Sub Public Sub CercaVuoteSotto() 'trova le vuote nell'intervallo Dim rngIn As Range Set rngIn = Range(Range("A1"), Range("A1").End(xlDown)).Offset(, 3) Dim rngVuota As Range With rngIn For i = 1 To rngIn.Cells.Count Set rngVuota = rngIn.Cells(i).Find(What:="", _ SearchOrder:=xlByRows, SearchDirection:=xlNext) If Not rngVuota Is Nothing Then rngVuota.Select If GetDomain(rngVuota.Offset(0, -1)) = GetDomain(rngVuota.Offset(1, -1)) Then ActiveCell.Offset(1, 0).Range("A1:C1").Select Application.CutCopyMode = False Selection.Copy ActiveCell.Offset(-1, 0).Range("A1").Select ActiveSheet.Paste End If: End If Next i End With Set rngIn = Nothing Set rngVuota = Nothing End Sub Private Function GetDomain(Stringa) Dim oRegExp As Object, strTemp As String Dim oMatches As Object Set oRegExp = CreateObject("vbscript.RegExp") With oRegExp .IgnoreCase = False .Global = True End With oRegExp.Pattern = "^(?:[^/]+://)?([^/:]+/)" Set oMatches = oRegExp.Execute(Stringa) For Each oMatches In oMatches strTemp = strTemp & oMatches.Value Next Set oRegExp = Nothing GetDomain = strTemp End Function Grazie a tutti per l'aiuto! |
|
|
Discussioni simili | ||||
Discussione | Forum | |||
Sloccare Excel bloccato in apertura di collegamento internet | Informatica | |||
Importanti indirizzi per acquistare il medicinale sutent | Medicina | |||
inserimento di tubo nella colonna di scarico | Idraulica | |||
Spostare selezione di celle Excel sempre alla stessa colonna | Informatica | |||
Colonna condominiale ostruita dal calcare che intasa il wc | Idraulica |