excel formulaarray - excel-formula
hi why do i get the runtime error 13: type mismatch error
while running the following code
Application.Goto Reference:="R1C1:R232C221"
Selection.FormulaArray = "=ROUND(a(),0)"
Selection.Replace What:="a()", Replacement:="IF(IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)=2,0,IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0,Sheet4!A1:HM232+Sheet5!A1:HM232))", LookAt _
:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Range("I9").Select
1) i know that formulaarray should be in R1C1 style... but A1 style is not required, it also works without any problems in A1 style
http://msdn.microsoft.com/en-us/library/bb208529.aspx
2) i found this way of writing from
http://www.dailydoseofexcel.com/archives/2005/01/10/entering-long-array-formulas-in-vba/
Let's analyze your Replacement:
Replacement:="IF(IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)=2,0,IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0,Sheet4!A1:HM232+Sheet5!A1:HM232))"
(1) change Sheet4!A1:HM232+Sheet5!A1:HM232 to X:
Replacement:="IF(IF(X=2,0," & _
"X)+IF(X=2,0," & _
"X)=2,0,IF(X=2,0," & _
"X)+IF(X=2,0,X))"
(2) glue the broken pieces back together:
Replacement:="IF(IF(X=2,0,X)+IF(X=2,0,X)=2,0,IF(X=2,0,X)+IF(X=2,0,X))"
(3) change IF(X=2,0,X) to Y:
Replacement:="IF(Y+Y=2,0,Y+Y)"
(4) some evaluation:
If X is 2, Y is 0, and the result is 0.
If X is 1, Y is 1, and the result is
0.
If X is anything else, Y is X, and the
result is 2*X.
(5) so the formula is equivalent to:
Replacement:="IF(OR(X=2,X=1),0,2*X)"
(6) so the next step would be to replace X (step 1 in reverse) ...
I'll just leave you with a question or two: How did it become so messy? Have you heard of "DRY" (Don't Repeat Yourself)?
I believe the "replacement" argument is too long. You need to keep that string under 255 characters. Put more of the formula into the Selection.FormulaArray line so that the replacement is less than 255 characters.
Related
Replacing Dot to comma in VBA
I have an issue when I try to replace all "." with "," It works normal when I use Ctrl + H in the Excel Sheet and do it manually. I have recorded the Macro from what I do in the sheet, and got this code Columns("Q:S").Select Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False But when I run the Macro it only removes the "." , instead of replacing it with "," . So for instance, if the cell states 4.000 aftter I run the Macro, it returns 4000. How do I fix this?? I have also tried changing decimal separators in the system, but it does not help me. Thank you for your help.
This should replace all the periods with commas regardless of data type. (as a string, so you'll no longer be able to easily calculate from them) You'll still be running into a lot of trouble if you want these numbers to be numbers, with correct separators. As a side note, When I used find and replace (Ctrl + H) I got the same result where my "4.123" became "4,123.00". This may be related to our system settings. Sub Test_Replace_Period_with_Comma() Dim ValueRange As Range Dim ValueSet Dim X As Long Dim Y As Long Set ValueRange = Intersect(Columns("Q:S"), Sheet8.UsedRange) ValueSet = ValueRange If ValueRange.Cells.Count = 1 Then ReDim ValueSet(1 To 1, 1 To 1) End If For X = 1 To UBound(ValueSet, 1) For Y = 1 To UBound(ValueSet, 2) 'Debug.Print ValueSet(X, Y) If ValueSet(X, Y) <> "" Then ValueSet(X, Y) = Replace(CStr(ValueSet(X, Y)), ".", ",", 1, , vbTextCompare) End If Next Y Next X ValueRange.NumberFormat = "#" ValueRange = ValueSet End Sub
VBA Excel - Proper Case Exceptions?
I have a macro written to convert customer names and titles to proper case if they aren't already. The problem with that is I sometimes have a list with abbreviations or acronyms (ie "High School" = "HS" ; Limited Partnership = "LP"). The issue is that my macro will proper case what should remain in upper case. To work around this I have a few exceptions written into my macro. Here's an example: Dim fndList As Variant Dim rplcList As Variant Dim F As Long fndList = Array("'S", "Xdock", "Llc", "Us ", "Urs", "Lc ", "Bbq", "Dq") rplcList = Array("'s", "XDock", "LLC", "US ", "URS", "LC ", "BBQ", "DQ") For F = 0 To UBound(fndList) Selection.Replace What:=fndList(F), Replacement:=rplcList(F), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False Is there a way to write a rule that recognizes if the term is not a word then it defaults to upper case? The other issue I have with my temporary solution is that some words containing the array will revert to upper case (ie: "Famous" = "FamoUS" ; "Alcohol" = "ALCohol" ; "Yourselves" = `YoURSelves"). Appreciate any help, pleae let me know if you require more info on my part.
VBA Filling a number up (ex. 1-> 00001)?
I have a code snippet which tells me in which row a specific value is With Tabelle1 Set pzrow = .Cells.Find(What:=pznr, LookIn:=xlValues, searchorder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, searchformat:=False) ' sucht die Nummer der Zeile raus End With The value can differ between 1 and 29000. Just for cosmetic reasons I want to display the row in a Label caption: pzrow1.Caption = "Eintrag Nr. " & pzrow.Row and this should show "Eintrag Nr. 00001" for example, not "Eintrag Nr. 1" Some Ideas?
You can use Format$() to specify how many digits: pzrow1.Caption = "Eintrag Nr. " & Format$(pzrow.Row, "00000")
Macro for Text to columns
Sub Macro9() ' ' Macro9 Macro ' ' Selection.TextToColumns Destination := Range("A3"), DataType := xlFixedWidth, _ FieldInfo := Array(Array(0,1),Array(60,1),Array(63,1),Array(68,1),Array(71,1), _ Array(85,1),Array(88,1),Array(93,1),Array(99,1),Array(107,1),Array(111,1),Array _ (120,1),Array(123,1),Array(127,1),Array(130,1),Array(134,1),Array(143,1),Array( _ 147,1),Array(157,1),Array(162,1),Array(165,1),Array(170,1),Array(202,1),Array( _ 233,1),Array(236,1),Array(238,1),Array(248,1),Array(251,1),Array(260,1),Array( _ 265,1),Array(277,1),Array(283,1),Array(287,1),Array(291,1),Array(295,1),Array( _ 299,1),Array(302,1),Array(306,1),Array(310,1),Array(322,1),Array(326,1),Array( _ 332,1),Array(335,1),Array(338,1),Array(344,1),Array(348,1),Array(356,1),Array( _ 360,1),Array(367,1),Array(373,1),Array(375,1),Array(384,1),Array(387,1),Array( _ 394,1),Array(398,1),Array(403,1),Array(409,1),Array(413,1),Array(419,1),Array( _ 424,1),Array(429,1),Array(432,1),Array(438,1),Array(444,1),Array(449,1),Array( _ 454,1),Array(458,1),Array(463,1),Array(468,1),Array(474,1),Array(478,1),Array( _ 481,1),Array(484,1),Array(489,1),Array(493,1),Array(524,1),Array(554,1),Array( _ 557,1),Array(563,1),Array(565,1),Array(577,1),Array(594,1),Array(613,1),Array( _ 616,1),Array(620,1),Array(626,1),Array(629,1),Array(634,1),Array(646,1),Array( _ 654,1),Array(659,1),Array(667,1),Array(669,1),Array(675,1),Array(683,1),Array( _ 689,1),Array(696,1),Array(699,1),Array(706,1),Array(714,1),Array(717,1),Array( _ 721,1),Array(728,1),Array(730,1),Array(743,1),Array(751,1),Array(754,1),Array( _ 758,1),Array(767,1),Array(774,1),Array(779,1),Array(787,1),Array(790,1),Array( _ 798,1),Array(805,1),Array(808,1),Array(817,1),Array(822,1),Array(826,1),Array( _ 835,1),Array(845,1),Array(853,1),Array(857,1),Array(864,1),Array(869,1),Array( _ 877,1),Array(881,1),Array(891,1),Array(895,1),Array(903,1),Array(912,1),Array( _ 916,1),Array(920,1),Array(927,1),Array(933,1),Array(937,1),Array(941,1),Array( _ End Sub I have 800 words in cell A3 in sheet input1, i recorded above macro by using function "Text to columns" in Excel 2007 which is giving error "Too many line continuations". Can someone tell me the exact code please, indeed I want to add all the 800 words in different individual cells as one word in each cell in the same row.
I do not believe it is possible to tell the Macro Recorder to create longer lines so I do not think TextToColumns can be made to record this code for you. You are using the fixed width option so words are starting at position 0, 60, 63, 68, 71 and so on. The start positions for about 120 words have been have been recorded so, if you wanted to build an array like this, you will have a lot of typing. You say "words". To me that implies variable length strings separated by spaces. If that is correct, try the code below. It uses function Split to split cell A3 into words by space. These are then spread out along row 4 with any gaps created by double or triple spaces ignored. Option Explicit Sub SplitCell() Dim CellCrnt As Long Dim InxW As Long Dim Word() As String With Worksheets("input1") Word = Split(.Range("A3"), " ") CellCrnt = 1 For InxW = LBound(Word) To UBound(Word) ' Any double spaces will cause empty entries in Word. ' Ignore these empty entries If Word(InxW) <> "" Then .Cells(4, CellCrnt).Value = Word(InxW) CellCrnt = CellCrnt + 1 End If Next End With End Sub
Converting Text To Hexadecimal Flash CS5
I am making a colour tester which consist of a background and 3 text box. You can enter the hexadecimal in each of the boxes which will change the background e.g. _ _ _ 0xF59900 _ _ _ Box1:F5 _ _ _ Box2:99 _ _ _ Box3:00 The top bit where it says "0xF59900" is a text field. How do I convert this to uint so that I can change the background colour.
Try something like: var bgColor = "0x123456"; var bgColor:uint = uint(bgColor);