Moltiplica each valore in un intervallo da una costante, ma ignora le celle vuote

Ho bisogno di una soluzione semplice e veloce per moltiplicare tutti i valori in un intervallo di un valore numbersco nel codice VBA. So di questa soluzione: moltiplicare l'intera gamma per valore?

Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("A1:B10") rngData = Evaluate(rngData.Address & "*2") 

Ma ha un grande svantaggio – se la cella originale è stata vuota, si ottiene zero. Come forzarlo saltare i valori vuoti?

  • Voglio automatizzare i lavori di copia di record fino a 10.000 ciascuno e salvare in file csv
  • Formula per tirare numbers dalla string di numbers
  • Come raschiare questo codice sorgente?
  • VBA Macro per confrontare i valori delle celle
  • Stampa Excel da Java direttamente al server di printing
  • È ansible scaricare una certa gamma di varianti nel foglio?
  • Voglio evitare looping attraverso i valori perché è molto lento.

  • Chiudi Excel quando l'utente è terminato
  • Come posso restituire il path di file di tutti i file, all'interno di una cartella? Questo è per Excel VBA
  • Excel non risponde durante la macro
  • Utilizzare la macro per cercare e restituire un collegamento ipertestuale, ma eseguire in eccezioni
  • Utilizza un ciclo per eliminare i dati in un intervallo di tabelle da più tabelle con nomi simili
  • La protezione della cartella di lavoro causa "la tabella esterna non è nel formato previsto" in SSIS
  • 3 Solutions collect form web for “Moltiplica each valore in un intervallo da una costante, ma ignora le celle vuote”

    Puoi utilizzare il tuo approccio esistente con il Evaluate ma get un po 'più intelligente con esso – può assumere condizioni ecc., Quindi basta includere un test per ISBLANK . Questo esempio viene testato su una combinazione di celle vuote e non vuote nell'intervallo A1:C3 – solo aggiornare per la tua gamma e proporla:

     Option Explicit Sub Test() Dim rng As Range Set rng = Sheet1.Range("A1:C3") 'give the name a range so we can refer to it in evaluate rng.Name = "foo" 'using Evaluate rng = Evaluate("IF(ISBLANK(foo),"""",foo*2)") 'using [] notation 'preferred IMO as dont need to escape " rng = [IF(ISBLANK(foo),"",foo*2)] End Sub 

    So che hai una risposta accettata, ma per qualunque cosa ne vale la pena, non devi call la gamma. E nel caso in cui le celle presenti nell'intervallo contengano text, questo codice di una row funziona bene

     Sub MultiplyRangeByConstant() [A1:C3] = [IF(ISBLANK(A1:C3),"",IF(ISTEXT(A1:C3),A1:C3,2*A1:C3))] End Sub 

    se ci sono formule o qualsiasi altra cosa nell'intervallo:

     '[a1:b3] = [{"=1","a";2,"=0/0";"",3}] [a1:b3] = [if(a1:b3="","",if(isNumber(a1:b3),a1:b3*2,a1:b3))] 

    o ignorare le formule, il buon vecchio PasteSpecial

     Set temp = [c1].EntireRow.Find("") ' any blank cell that is not in the range temp.Value = 2 temp.Copy [a1:b3].SpecialCells(xlCellTypeConstants).PasteSpecial , Operation:=xlMultiply temp.Value = "" 
    Microsoft Office Excel Spreadsheet è il miglior software di Office, Excel VBA e formule Excel rendono il foglio di calcolo più veloce.