.NumberFormat not working on cells using SUMIFS - excel

I want to format a range of cells using the Indian currency comma separation style, that is formatting the default 123,456,789 into 12,34,56,789, and I'm using the following code :
LastCompoundInterval = Range("B" & Rows.Count).End(xlUp).Row
Range("F2:F" & LastCompoundInterval).Formula = "=SUMIFS($I$2:$I$" & LastTransaction & ",$H$2:$H$" & LastTransaction & ","">"" & B2, $H$2:$H$" & LastTransaction & ",""<="" & C2)"
With Range("F2:F" & LastCompoundInterval)
.NumberFormat = "[>=10000000]##\,##\,##\,##0;[>=100000] ##\,##\,##0;##,##0"
End With
The above number format works on other ranges as expected, but the default number format continues to be in use for Range F

As a standalone Excel solution, I changed your formula to format it as it is being incorporated into the cell using TEXT().
LastCompoundInterval = Range("B" & Rows.Count).End(xlUp).Row
Range("F2:F" & LastCompoundInterval).Formula = "=TEXT(SUMIFS($I$2:$I$" & LastTransaction & ",$H$2:$H$" & LastTransaction & ","">"" & B2, $H$2:$H$" & LastTransaction & ",""<="" & C2),""[<=9999999]###,####;###,###,####"")"
For a VBA solution, this will help guide you by adding the reference to the workbook / worksheet. Be sure to change "Sheet1" to the name of your worksheet.
LastCompoundInterval = Workbooks(ThisWorkbook).Worksheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Row
Workbooks(ThisWorkbook).Worksheets("Sheet1").Range("F2:F" & LastCompoundInterval).Formula = "=SUMIFS($I$2:$I$" & LastTransaction & ",$H$2:$H$" & LastTransaction & ","">"" & B2, $H$2:$H$" & LastTransaction & ",""<="" & C2)"
With Workbooks(ThisWorkbook).Worksheets("Sheet1").Range("F2:F" & LastCompoundInterval)
.NumberFormat = "[>=10000000]##\,##\,##\,##0;[>=100000] ##\,##\,##0;##,##0"
End With

Related

Creating and Pasting Formula in VBA with Changing Cell Reference

I need to create a formula that is going to concatenate 3 different cells into one date. The formula is going to be a part of a loop function so I need the cell reference to change as the loop function runs.
I am having trouble with the syntax such as the "&" and the """" that are necessary to distinguish parts of the formula from the cell references.
For now I am just trying to get the formula to paste into a single cell without the loop. The 3 cells that I am combining are in columns: N,O & P. I am trying to paste the formula into column M.
I tried creating the formula on a separate "Data" tab and then simply copy and pasting it into each cell using VBA but the row number does not update according to the row that the formula is pasted.
I tried rearranging the & and "" for a while and could not figure out the winning combination.
FormulaRow = Cells(Rows.Count, "M").End(xlUp).Offset(1).Row
M_Formula = "=N" & FormulaRow & "" / "" & "O" & FormulaRow & "" / "" & "P" & FormulaRow
Range("M" & FormulaRow).Value = M_Formula
I am expecting to get the following result: =N5&"/"&O5&"/"&P5 with the row number corresponding to the row that the formula is pasted.
When I tried the copy and paste method I got this message: "Object Doesn't Support this Property or Method"
Any help would be appreciated. Thank you!
Maybe:
Sub sub1()
' If you have 12 in N2 and 34 in O2 and 5678 in P2:
Dim FormulaRow&, M_Formula$
FormulaRow = 2
M_Formula = "=N" & FormulaRow & "&" & """" & "/" & """" & "&" & _
"O" & FormulaRow & "&" & """" & "/" & """" & "&" & _
"P" & FormulaRow
Cells(FormulaRow, ColNum("M")) = M_Formula ' gives the formula you want 12/34/5678
Cells(FormulaRow, 13) = M_Formula ' also gives the formula you want 12/34/5678
End Sub
Function ColNum&(col$)
ColNum = Range(col & 1).Column
End Function
Excel is smart enough to increment the row reference when you do a range in one go:
Range("M5:M" & Range("N" & rows.count).end(xlup).row).formula = "=N5 & ""/"" & O5 & ""/"" & P5"
That will do what you want in 1 line.
Then you can copy the result, paste as values then format to date with something like this:
Sub EnterDate()
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Formula = "=N5 & ""/"" & O5 & ""/"" & P5"
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Copy
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).PasteSpecial xlPasteValues
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).NumberFormat = "DD/MM/YYYY"
'Force a reevaluate to make it see actual dates
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Formula = Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Value
End Sub
Using this method I just tested on over 12,000 rows and it took under a second.
With regards to the comments about using the date function, using the date function is a much better method, I wanted to show you how to do it using your own method but you can get rid of the formatting code if you use Date like so:
Sub EnterDate()
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Formula = "=DATE(P5,O5,N5)"
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Copy
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).PasteSpecial xlPasteValues
End Sub
If you want to leave the formulas then simply delete the last 2 lines in there.

Concatenate / Combine Columns with time format and general format

I'm stuck with a problem and can't find a solution. I want to concatenate cells with two different formats. One cells has the format "tt:mm" and the other cell has format "general" how would I concatenate the cells? I have seen online that this can be done in Exel with something like
=A1 & TEXT(B1,"tt:mm")
or
=CONCATENATE(TEXT(A1;"tt:mm"); " ";B1)
But how is this done in VBA via a loop?
I have tried to just add the cells together but I the date is not returned in the format that I want.
Sub Merge()
Dim i As Long
Dim time As String
LastRow = Range("A" & StartRow).End(xlDown).Row
For i = StartRow To LastRow
Range("B" & i).Value = Range("B" & i).Value & " " & Range("A" & i).Value
Range("B" & i).NumberFormat = "tt:mm General"
End Sub
So if I run this code for xyz and 02:30 then I get 0,15625 xyz but I want to get 02:30 xyz.
Many thanks for any help.
Make this line:
Range("B" & i).Value = Range("B" & i).Value & " " & Range("A" & i).Value
Into:
Range("B" & i).Value = format(Range("B" & i).Value, "hh:mm") & " " & Range("A" & i).Value
This link has the different format strings: https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/format-function-visual-basic-for-applications

Excel VBA IF OR

Please help to run this formula if the cell C2 value is saturday
Range("F2").Formula = "=IF(AND(D2>=TIME(9,16,0),D2<=TIME(11,59,0)),D2-TIME(9,0,0),IF(AND(D2>=TIME(14,16,0),D2>=TIME(12,00,0)),D2-TIME(14,0,0)*1,0))"
and if Cell C2 value is Sunday to Friday
Range("F2").Formula = "=IF(AND(D2>=TIME(8,16,0),D2<=TIME(10,30,0)),D2-TIME(8,0,0),IF(AND(D2>=TIME(12,16,0),D2>=TIME(10,31,0)),D2-TIME(12,0,0)*1,0))"
Until the last row which has data in the sheet.
In short check the value in C2, if = saturday formula 1 or formula 2.
From C2 onwards Column C contains date. eg
05/03/2019
Sample Excel file Screenshot
Try this:
Option Explicit
Sub Test()
Dim i As Long
For i = 2 To Cells(Rows.Count, "C").End(xlUp).Row
If Weekday(Range("C" & i)) = 7 Then
Range("F" & i).Formula = "=IF(AND(D" & i & ">=TIME(9,16,0),D" & i & "<=TIME(11,59,0)),D" & i & "-TIME(9,0,0),IF(AND(D" & i & ">=TIME(14,16,0),D" & i & ">=TIME(12,00,0)),D" & i & "-TIME(14,0,0)*1,0))"
Else
Range("F" & i).Formula = "=IF(AND(D" & i & ">=TIME(8,16,0),D" & i & "<=TIME(10,30,0)),D" & i & "-TIME(8,0,0),IF(AND(D" & i & ">=TIME(12,16,0),D" & i & ">=TIME(10,31,0)),D" & i & "-TIME(12,0,0)*1,0))"
End If
Next i
End Sub

VBA range.formula issue (LEN, RIGHT & LEFT)

I'm trying to do a VBA code to accomplish 2 things as follows:
Count how many characters there is on cell A1, using the formula LEN(A1) and one the last line, I'm trying to have the formula RIGHT(LEFT(A1;Q1-2);6) on cell J1
Please follow down my VBA code so far:
LR = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To LR
cel = "A" & i
cel2 = "P" & i
cel3 = "Q" & i
Range("P" & i).Formula = "=LEN(" & cel & ")"
Range("J" & i).Formula = "=RIGHT(LEFT(" & cel & "," & cel3 & "-" & 2 & ")," & 6 & ")"
Next i
It seems something silly what is missing, however, I couldnt manage to solve it so far
Thanks in advance
You’re missing a Right, and some other things
Range("J" & i).Formula = "=RIGHT(LEFT(" & cel & "," & cel3 & "-2), 6)"

Define formula of Countif in Excel VBA, not working

I really appreciate if anyone could help; I've been working on this for a while...
I just want to define the formula of countif in a cell, here is the code:
Range("E" & PLrowstart).Formula = "= CountIf($B$PLrowstart:$B$PLrowend" & ",B2)"
PLrowstart and PLrowend are integer variables I set before the line. The range for count if is range("B" & PLrowstart & ":B" & PLrowend). I've also tried other ways, none worked...
TIA.
Range("E" & PLrowstart).Formula = "= CountIf($B$" & PLrowstart & ":$B$" & PLrowend & ",B2)"
Try this
Sub SetFormula()
PLrowstart = 2
PLrowend = 4
Range("E" & PLrowstart).Formula = "=CountIf($B$" & PLrowstart & ":$B$" & PLrowend & ",B2)"
End Sub

Resources