返回列表 上一主題 發帖

[發問] 垂直欄位項目轉至水平列顯示

[發問] 垂直欄位項目轉至水平列顯示

本帖最後由 kasa 於 2015-12-23 15:25 編輯

請教各位大大,
如何讓附件各編號key in之Item可於第二列水平展開所對應之Item顯示"1"
例如:於編號3之B欄key 入"D1"後,而同步可讓"F5"儲存格顯示"1"
Book2.rar (7.07 KB)

我試著寫出以下巨集,結果是成功的,因我還屬自學的初心者
故有以下需請教各位前賢,請不吝指教,謝謝.
(1)是否有更好的寫法?
(2)如果B3~B14欄位原保持空白,要寫成當一key入代碼時,可自動變換對應欄位顯示"1",該如何運用worksheet_change語法加入此段巨集
要以如此寫法的用意是:就不用再額外有執行巨集的動作了
Book2.rar (12.73 KB)

Option Explicit
Sub TESTsearch()
Dim i As Integer
For i = 3 To 14
Select Case Cells(i, 2)
       Case "A"
         Cells(i, 3) = 1
       Case "B"
         Cells(i, 4) = 1
       Case "C"
         Cells(i, 5) = 1
       Case "D1"
         Cells(i, 6) = 1
       Case "D2"
         Cells(i, 7) = 1
       Case "D3"
         Cells(i, 8) = 1
       Case "D4"
         Cells(i, 9) = 1
       Case "D5"
         Cells(i, 10) = 1
       Case "D6"
         Cells(i, 11) = 1
       Case "D7"
         Cells(i, 12) = 1
       Case "D8"
         Cells(i, 13) = 1
       Case "D9"
         Cells(i, 14) = 1
       Case "D10"
         Cells(i, 15) = 1
End Select
Next i
End Sub

TOP

搜索了worksheet_change語法,還是不太懂如何運用

TOP

嘗試用以下Worksheet_Change寫法,結果當在B3~B14逐一key入代碼後,C3~O14欄位沒反應,沒於對應代碼處顯示"1"

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
If Not Intersect(Target, Range("B3:B14")) Is Nothing Then
For i = 3 To 14
Select Case Cells(i, 2)
       Case "A"
         Cells(i, 3) = 1
       Case "B"
         Cells(i, 4) = 1
       Case "C"
         Cells(i, 5) = 1
       Case "D1"
         Cells(i, 6) = 1
       Case "D2"
         Cells(i, 7) = 1
       Case "D3"
         Cells(i, 8) = 1
       Case "D4"
         Cells(i, 9) = 1
       Case "D5"
         Cells(i, 10) = 1
       Case "D6"
         Cells(i, 11) = 1
       Case "D7"
         Cells(i, 12) = 1
       Case "D8"
         Cells(i, 13) = 1
       Case "D9"
         Cells(i, 14) = 1
       Case "D10"
         Cells(i, 15) = 1
End Select
Next i
End If
End Sub

TOP

謝謝各位前賢指導,我收下慢慢咀嚼,感謝~

TOP

針對"准提部林"前輩寫的程式,請幫忙指點以下,謝謝~
(1)在未特別寫出定義M變數屬性,是預設定義為integer嗎?
(2)請您指導以下寫這3行的真實對應含義(爬過文,但我認為我似懂非懂,所以想搞懂在何種狀況下,可同樣運用此寫法)
   On Error GoTo 999  '發生錯誤時,執行標記999那行程式
   Application.EnableEvents = False  '關閉事件觸發
   999: Application.EnableEvents = True  '恢復事件觸發

(3)xR(1, 2)==>這個指的是? 我只會推論這寫法是以第一列第二行之儲存格為基準位置,然後有變動之所有儲存格為xR的話,這代表實際有變動值儲存格之位置
或者是因為上面有先寫:For Each xR In .Cells, 所以xR(1, 2)是指以第一列二行為基準位置,然後固定第二行視xR在第幾列位置來代表實際有變動值儲存格之位置

TOP

太謝謝了,清楚很多了

M = Application.Match(xR, [2:2], 0) '找出Item在第2列的位置
再請問,如果只要單純找出Item在G2到M2的位置,用以下寫法卻失敗,該如何修正才對? 謝謝.
M = Application.Match(xR, Range("G2:M2"), 0)

TOP

不好意思,我找到方法了,感謝前賢的大方指導,豁然開朗多了~~~~~

Set rng2 = [AH1:BQ1]
M = Application.Match(xR, rng2, 0)

TOP

抱歉再提問以下,感謝~
以 B3 為例,xR(1, 2) 等同 xR.Cells(1, 2),亦即為其〔右一格〕 C3
=>以 B3 為例,若改成xR(1, 1) 等同 xR.Cells(1, 1),亦即仍為B3,我這樣理解是對的嗎?

TOP

本帖最後由 kasa 於 2015-12-28 15:55 編輯

再請教若需"同時"去"貼入"資料於B/C欄之"屬性"與"細目"欄位中,
其他項目仍皆依"屬性"來比對出第二列之欄位並在所屬同列填入"1",但只有屬性C需依"細目"之C1/C2比對出第二列之欄位並在所屬同列填入"1"
如果仍要寫在Worksheet_Change內,是否有可能達成? 我爬文暫找不到可以同時存在兩種不同target的方法
再請前輩幫忙指導,感謝~
Book2.zip (8.08 KB)

TOP

        靜思自在 : 為人處世要小心細心,但不要「小心眼」。
返回列表 上一主題