Excel – 根据垂直值select一个水平列

我有一个工作表填充通过数据源,列出date,垂直以及水平。

  • 垂直date是需要采取行动的项目。
  • 水平date是即将到来的工作周date。

此时,我想要做的就是根据垂直行中find的内容,select水平行的相应列。 我会尽量做一个简单的图表。

date3 2 1 4 5 6 7 8 9

1

3

9

在这个例子中, 我想select水平行的列1(如果这是一个新的工作表编号,期望它是列D我也需要能够通过运行一个macros,即我不能点击任何细胞最初。

我不认为这可以使用macros或标准的XLSfunction来完成。

您需要编写一个VBA脚本来比较这些值。 一旦写完,就可以通过点击button或打开XLS来调用。

好的,谢谢你的指导。

我打算延长这个问题。 基本上我最终想做的是根据从数据源中inputExcel的值绘制一张Gannt图表。 我有需要做预测开始和结束的工作,所以我打开我的表来填充部门和date按降序通过SQL服务器,然后运行代码。 这是一个人在这里2天手动(许多部门)

现在显然这对我来说是独特的,但我发现操纵这些date有点棘手。 如果有人在某个时间点寻找类似的东西,我会发布模块的整个代码。

它产生这个; (我已经突出显示了我隐藏的date字段。) 替代文字

说真的,这整整花了我一天的时间,所以我当然希望它可以帮助别人;)步伐

码;

Sub One_Macro_To_Rule_Them_All() ' 'This clears the WOP sheet for formatting Sheets("WOP").Select Range("A8").Select Selection.CurrentRegion.Select Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1, _ Selection.Columns.Count).Select Selection.ClearContents Cells.Select With Selection.Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 .PatternTintAndShade = 0 End With Cells(3, 2) = "Date : " & Format(Date, "dd/mm/yyyy") '************** 'Copy the data to the WOP Sheet Sheets("Data").Select Rows("1:1").Select Range( _ "Table_FromMyServer_view_ForwardJobsLive_WOP[[#Headers],[Job No]]") _ .Activate Range("B2").Select Selection.CurrentRegion.Select Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1, _ Selection.Columns.Count - 1).Select Selection.Copy Sheets("WOP").Select Range("A8").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A8").Select Cells(2, 2) = "Works Order Priority Sheet - " & Cells(8, 1) Selection.CurrentRegion.Select Selection.Offset(0, 6).Resize(Selection.Rows.Count, _ Selection.Columns.Count - 6).Select curdate = Format(Date, "dd/mm/yyyy") Dim dt As String dt = CStr(curdate) 'find the start of the date range Range("A8").Select Selection.CurrentRegion.Select Selection.Offset(0, 6).Resize(Selection.Rows.Count, _ Selection.Columns.Count - 6).Select Dim rngetosearch As Range Set rngetosearch = Selection rngetosearch.Find(What:="EARLIER", After:=ActiveCell, LookIn:=xlFormulas _ , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Select Selection.Offset(0, 1).Resize(Selection.Rows.Count, Selection.Columns.Count + 1).Select dterangestart = ActiveCell '********* '************* 'Format todays column as yellow Range("A8").Select Selection.CurrentRegion.Select Selection.Offset(0, 6).Resize(Selection.Rows.Count, _ Selection.Columns.Count - 6).Select Dim sel As Range Dim rangetosearch As Range Set rangetosearch = Selection Dim strdate As String strdate = Date strdate = Format(strdate, "Short Date") Set sel = rangetosearch.Find(What:=CDate(strdate), After:=ActiveCell, LookIn:=xlFormulas _ , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If sel Is Nothing = False Then sel.Activate End If ActiveSheet.Range(sel.Cells.Address, ActiveSheet.Range(sel.Cells.Address).End(xlDown)).Select With Selection.Interior .Color = 65535 End With '*************** 'Cycle Through the rows and change the blocks Sheets("WOP").Select Selection.CurrentRegion.Select Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1, _ Selection.Columns.Count - 0).Select Dim strtdte As Date Dim enddte As Date Dim actdte As Date Dim diff As Integer Dim selrnge As Range Set selrnge = Selection For Each rwrow In selrnge.Rows strtdte = rwrow.Cells(5) enddte = rwrow.Cells(7) actdte = rwrow.Cells(6) cell = rwrow.Cells(1) If strtdte < dterangestart Then 'strtdte = dterangestart diff = DateDiff("d", dterangestart, enddte) + 1 Else diff = DateDiff("d", strtdte, enddte) End If strdate = strtdte strdate = Format(strdate, "Short Date") Range("A8").Select Selection.CurrentRegion.Select Selection.Offset(0, 6).Resize(Selection.Rows.Count, _ Selection.Columns.Count - 6).Select Set rngetosearch = Selection If strtdte < dterangestart Then Set sel = rngetosearch.Find(What:="EARLIER", After:=ActiveCell, LookIn:=xlFormulas _ , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) Else Set sel = rngetosearch.Find(What:=CDate(strdate), After:=ActiveCell, LookIn:=xlFormulas _ , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) End If If sel Is Nothing = False Then Dim col As Integer col = CInt(sel.Column) Selection.CurrentRegion.Select ActiveSheet.Cells(CInt(rwrow.Row), col).Select Selection.Offset(0, 0).Resize(Selection.Rows.Count, Selection.Columns.Count + diff).Select With Selection.Interior .Color = getcolor(CStr(cell)) If actdte <> #12:00:00 AM# Then .TintAndShade = -0.249977111117893 .PatternTintAndShade = 0.399975585192419 Else .TintAndShade = 0.399975585192419 .PatternTintAndShade = 0.399975585192419 End If End With End If Next '************* Range("A8").Select End Sub