2017-07-27 47 views
0

我有一個跨越列的月份表。月份總是在變化,所以我正在嘗試調整我的代碼以適應這種情況。如果列保持靜態,它會很好,我只需要弄清楚如何動態地找到哪一列是總列。基於行和列的字符串動態抓取單元格

這是我到目前爲止有:

Sub CalculateTotalGP() 

For RowToTest = Cells(Rows.count, 27).End(xlUp).Row To 2 Step -1 
     With Cells(RowToTest, 27) 
      If .Value = "GP%" Then 
      Range("AL" & RowToTest & ":AL" & RowToTest).Formula = "=SUMIFS(AL:AL,AA:AA,""GrossProfit Total"")/SUMIFS(AL:AL,AA:AA,""Income Total"")" 
     End If 
      End If 
     End With 
Next RowToTest 

End Sub 

我所需要的,以便用一個變量來代替「AL」到處搶:

InStr(1, Cells(6, i), "Total") 

基本上無論身在何處總列在指定的範圍內,輸入該公式。唯一保持不變的是我的色譜柱範圍,從AD8到AS9999(或N)的16個色譜柱和來自色譜柱AA的我的標準。

你能幫我弄清楚嗎?

謝謝

+0

對不起,我不明白你在問什麼。你想通過價值找到一個單元格嗎?你是否想通過範圍表達式找到一個單元格?我不明白 – chiliNUT

+0

我正在嘗試通過一行和一列找到一個單元格。所以如果「GP%」在AA10上,「總數」在AL6上,那麼我需要AL10。 AA排(GP,效率等)。 AD:AS(5月,6月,7月等)合計。我試圖通過x行和y列找到單元格,並在那裏輸入我的公式。 – iCosmin

回答

1

要得到列號的標題 「總計」 使用GetHeaderCol()函數(而不是匹配)

Option Explicit 

Public Sub TestHeader() 
    Dim tHeader As Long 

    tHeader = GetHeaderCol(Sheet1, "Total", 6) 'If "Total" in row 6 & col H, result -> 8 

    If tHeader > 0 Then Debug.Print "Total column: " & tHeader 
End Sub 

Public Function GetHeaderCol(ByRef ws As Worksheet, ByVal hdr As String, _ 
          Optional ByVal hdrRow As Long = 1) As Long 

    Dim hdrs As Variant, c As Variant 

    If ws Is Nothing Then Set ws = ActiveSheet 
    hdrRow = IIf(hdrRow = 0, 1, Abs(hdrRow)) 
    hdrs = ws.Range(ws.Cells(hdrRow, 1), ws.Cells(hdrRow, Columns.Count).End(xlToLeft)) 

    If Not IsEmpty(hdrs) Then 
     For c = 1 To UBound(hdrs, 2) 
      If InStr(1, hdrs(1, c), hdr, vbTextCompare) > 0 Then 
       GetHeaderCol = c 
       Exit Function 
      End If 
     Next 
    End If 
    GetHeaderCol = 0 
End Function 
+0

你好保羅。感謝您的幫助。不過,我無法將其應用於我的示例。你能幫我解決嗎?基本上我試圖在包含x的行和包含y的列的交集處輸入內容。 – iCosmin

+1

嘿保羅,我已經設法弄清楚你使用的是什麼。感謝您對這個社區的貢獻。乾杯! – iCosmin

+0

@iCosmin:對於最近的回覆感到抱歉 - 我很高興你能解決這個問題 –

相關問題