iT邦幫忙

1

Excel VBA 儲存格顏色移動

  • 分享至 

  • xImage

如果右邊儲存格沒有顏色,則向右移動,到E欄停止
謝謝
https://ithelp.ithome.com.tw/upload/images/20210524/2013110373b9pjf5RW.jpg

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
rogeryao
iT邦超人 7 級 ‧ 2021-05-24 14:30:51
最佳解答
Private Sub CommandButton1_Click()
Dim ColorCount As Integer
Dim MyArray
For Z = 1 To ActiveSheet.UsedRange.Rows.Count
  ReDim MyArray(1 To 5)
  ColorCount = 0
  ' 記錄顏色
  For M = 5 To 1 Step -1
    If Cells(Z, M).Interior.Color <> 16777215 Then
      ColorCount = ColorCount + 1
      MyArray(ColorCount) = Cells(Z, M).Interior.Color
    End If
  Next M
  ' 清除顏色
  Range("A" & Z & ":E" & Z).Interior.Color = xlNone
  ' 寫入上面記錄的顏色
  For K = 1 To ColorCount
    Cells(Z, 5 - K + 1).Interior.Color = MyArray(K)
  Next K
Next Z
End Sub

非常感謝你,各方面都能考慮到,實在非常完美

0
blanksoul12
iT邦研究生 5 級 ‧ 2021-05-24 09:43:02

笨一點的做法

dim col_arr
For i = 1 To [e1048576].End(xlUp).Row
    ReDim col_arr(1 To 5)
    For y = 1 To 5
        If Cells(i, y).Interior.Color <> 16777215 Then
            col_arr(y) = Cells(i, y).Interior.Color
        End If
    Next
    Rows(i).Interior.Pattern = xlNone
    row_col = WorksheetFunction.Trim(Join(col_arr))
    x = UBound(Split(row_col, " "))
    If row_col <> "" Then
        For y = 5 To 1 Step -1
            Cells(i, y).Interior.Color = Split(row_col, " ")(x)
            x = x - 1
            If x = -1 Then Exit For
        Next
    End If
Next

因為E欄後面還有其他儲存格有顏色,所以才會希望能在E欄停止
你的VBA對我也是非常有幫助,誠摯謝謝你的回答

我要發表回答

立即登入回答