iT邦幫忙

0

Excel VBA對照字串並自動按順序排列

我有一個sheets 內有資料:
早:123456789
晚:A1,A2,A3,A4,B5
夜:B1,B2,B3,B4
比如說A3:R3我寫:
早早早夜夜夜早早夜晚晚晚早早早晚晚早
那如何寫VBA讓程式自動對照並改寫出:
1,2,3,B1,B2,B3,4,5,B4,A1,A2,A3,6,7,8,A4,A5,9。
請大家幫忙了,謝謝?!

no1kent iT邦新手 5 級 ‧ 2019-06-12 21:36:03 檢舉
各位大大抱歉,那如果要繼續往下要如何改寫呢?
早:1, 2, 3, A1, A2
晚:N1, N2, N3, T, B
第二天:
早 早 晚 晚 早 晚 早 早 晚 晚
1, 2, N1, N2, 3, N3, A1, A2, T, B
第二天:
早 早 晚 晚 晚 早 晚 早 晚 早
2, 3, N2, N3, N1 A1 T 1, B, A2

第二天要先判斷是否和上一天同樣上早(晚)班,如果同樣就依班次往下接,如果不同就跳下一格,等同樣早(晚)班的依序排完後,再排早接晚和晚接早班的。

比如:第五位人員第一天是早班,第二天是晚班,那第一次判斷時就先跳過不排班,等第二次要排早晚班互換的同仁時,第五位人員是晚班第一個順位,但班次不能重複上,所以從晚班N1開始判斷有沒有人上過,沒有就填N1上去,假如有上過,就依序往下找,直到找到未排的班次,然後在填上。

不知有沒有高手知道如何寫VBA程式碼。感謝了
pcw iT邦研究生 2 級 ‧ 2019-06-12 23:47:19 檢舉
開新帖吧。

2 個回答

2
Neish
iT邦研究生 3 級 ‧ 2019-06-12 11:00:43
最佳解答

我的想法是把"早"、"晚"、"夜" 的累加數字用變數跑FOR迴圈

結果我先寫在第四列

Sub test()

    Dim str_col As Integer
    Dim end_col As Integer
    
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer

    
    '找最末欄
    end_col = Rows(3).Find("").Column - 1
    
    For str_col = 1 To end_col
    
        If Cells(3, str_col) = "早" Then
            i = i + 1
            Cells(4, str_col) = i
            
        ElseIf Cells(3, str_col) = "晚" Then
            j = j + 1
            Cells(4, str_col) = "A" & j
            
        ElseIf Cells(3, str_col) = "夜" Then
            k = k + 1
            Cells(4, str_col) = "B" & k
            
        End If
        
    Next
    
End Sub
0
pcw
iT邦研究生 2 級 ‧ 2019-06-12 13:59:28

我用Select...Case

Sub test()
    Dim myRng As Range, rng As Range
    Dim i As Long, j As Long, k As Long
    
    Set myRng = Range("A3:R3")
    
    For Each rng In myRng
        Select Case rng
        Case "早"
            i = i + 1
            rng.Offset(1).Value = i
        Case "晚"
            j = j + 1
            rng.Offset(1).Value = "A" & j
        Case "夜"
            k = k + 1
            rng.Offset(1).Value = "B" & k
        Case Else
        End Select
    Next rng
End Sub

no1kent iT邦新手 5 級 ‧ 2019-06-12 18:56:02 檢舉

謝謝PCW,您的方法也很棒

我要發表回答

立即登入回答