返回列表 上一主題 發帖

[發問] 揀選名稱中有【均值】的檔案之語法。

[發問] 揀選名稱中有【均值】的檔案之語法。

本帖最後由 Airman 於 2019-6-1 05:01 編輯

測試檔0601.rar (38 KB)
均值主檔的程式碼和其它主檔的程式碼的差別只在︰
均值為有執行 列12~列15的程式碼
其它為不執行 列12~列15的程式碼

在多種檔案名稱中~
當名稱中有均值二個文字的檔案,其[B1:BK1]必須移除,再重新由B1往右填入1~49的數字。
EX︰今日總表(均值排序)-1_9-(基準日:2019-05-31);空數總覽(均值排序)-(基準日:2019-05-31);機數總覽(均值排序)-(基準日:2019-05-31)
當名稱中沒有均值二個文字的檔案,其[B1:AX1]都是數字,只要更改數字格式即可。
EX︰今日總表(合數排序)-1_9-(基準日:2019-05-31);空數總覽(生肖排序)-(基準日:2019-05-31);機數總覽(八卦排序)-(基準日:2019-05-31)
所以必須以均值主檔來執行名稱中有均值的.csv檔案更改為.xls檔案;再以其它主檔來執行名稱中無均值的.csv檔案更改為.xls檔案。

因為每一期都必須由882個檔案中,挑出147個名稱中有均值的檔案,分開執行檔案類型更改~覺得很麻煩~
所以希望能將均值和其它二個主檔合併,而列12~列15的程式碼可以揀選名稱中有均值的檔案才執行。
請問︰上述二個主檔合併後,而列12~列15的程式碼可以揀選名稱中有均值的檔案才執行的需求的之語法?
懇請各位先進惠予賜教!謝謝!

本帖最後由 Airman 於 2019-6-1 07:19 編輯

回復 1# Airman
1#提問說明作廢~~

均值.rar (23.93 KB)
提問說明重新整理如下 :
當名稱中有均值二個連續文字之檔案,則執行列12~列15的程式碼,否則略過不執行

請問︰均值主檔的程式碼要如何修編 ?

以上 懇請各位先進惠予賜教!謝謝!

TOP

補充 :
列12~列15的程式碼~
            [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next

TOP

本帖最後由 Scott090 於 2019-6-2 09:07 編輯

回復 3# Airman

      試試這個語法
      if instr("???均值???", "均值")<>0 then .......

TOP

回復 4# Scott090
Scott090大大 :您好!
不知小弟有沒有會錯意!?
是這樣嗎?

           If Debug.Print UBound(Split("???均值均值???", "均值")) Then GoTo 101
            [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next
101:

語法不對^^"

TOP

Sub TEST()
Dim P$, F$, A$
P = ThisWorkbook.Path
Application.ScreenUpdating = False
Do
  If F = "" Then F = Dir(P & "\*.csv") Else F = Dir
  If F = "" Then Exit Do
  A = Replace(Replace(F, "基準日:", ""), ".csv", "")
  With Workbooks.Open(P & "\" & F)
       If InStr(A, "均值") Then
          [B1:BK1].Clear
           For j = 1 To 49: Cells(1, j + 1) = j: Next
       End If
       If InStr(A, "總表") Then [A:A].NumberFormatLocal = "yyyy/mm/dd"  '總表-日期-固定長度較好檢視
       [B1:AX1].NumberFormatLocal = "00"
       With [B1:AX1].Font: .Bold = True: .Size = 14: .ColorIndex = 5: End With
       With [A:AX]
           .Font.Name = "Arial"
           .HorizontalAlignment = xlCenter
           .EntireColumn.AutoFit
       End With
       [B2].Select
       With ActiveWindow: .FreezePanes = True: .Zoom = 75: End With
       .SaveAs Filename:=P & "\" & A & ".xls", FileFormat:=xlNormal, CreateBackup:=False
       .Close 0
  End With
  Kill P & "\" & F
Loop
End Sub


================
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

回復 5# Airman


    不知哪一個是版主需要要的。
     1. 有"均值" 二字就執行:
          if instr("???均值???", "均值") <>0 then
               [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next
        end if
101:

      2.  有連續的 "均值" 才會執行:
         if UBound(Split("???均值均值???", "均值"))>1 Then
            [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next
        end if
101:

     假如二者都不是 ,請忽略不用理會

TOP

回復 5# Airman


1) path 是vba專用字, 儘量不用來設變數
2) 問題應將規則說明, 不要讓人只從程式碼中去判讀
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

本帖最後由 Airman 於 2019-6-2 11:18 編輯

回復 7# Scott090
Scott090大大 :
測試報告:   
咖啡色字=新增的貴解程式碼
藍色字=選擇性執行的程式碼
需求=檔案名稱有均值時,則執行藍色字的程式碼;如果檔案名稱內沒有均值時,就跳過藍色字的程式碼(即不執行)。
目前以下列的程式碼=無論檔案名稱內沒有或沒有均值的文字,全部都有執行藍色字的程式碼。
請問 : 要如何修正?
謝謝您^^

    Sub Ex()
        Dim Path As String, A As String, j%
        Path = ThisWorkbook.Path  '請修改為你的資料夾
        A = Dir(Path & "\*.CSV")
        Do While A <> ""
            Name Path & "\" & A As Path & "\" & Replace(A, "基準日:", "")
            A = Replace(A, "基準日:", "")
             With Workbooks.Open(Path & "\" & A)
                 .SaveAs Filename:=Path & "\" & Replace(A, ".csv", ".xls"), FileFormat:=xlNormal
           
          If UBound(Split("???均值均值???", "均值")) > 1 Then
            [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next

          End If

                With [B1:AX1]
                    .Font.Bold = True
                    .Font.Size = 14
                    .NumberFormatLocal = "00"
                    .Font.ColorIndex = 5
                End With
                    
                    Columns("A:AX").Font.Name = "Arial"
                    Columns("A:AX").HorizontalAlignment = xlCenter
                    Columns("A:AX").EntireColumn.AutoFit
                    [B2].Select
                    ActiveWindow.FreezePanes = True
                    ActiveWindow.Zoom = 75
                 
                 .Close True
             End With
            Kill Path & "\" & A
            A = Dir
        Loop
    End Sub

TOP

回復 8# 准提部林
准大 ;
不好意思~以為這樣會比較簡明^^"
謝謝您的建議!

規則如1樓的說明,但好像太冗長^^

TOP

        靜思自在 : 不要小看自己,因為人有無限的可能。
返回列表 上一主題