返回列表 上一主題 發帖

[發問] 搜尋、比對,再複製過來的功能

回復 10# 准提部林


    感謝大大提供另一作法
    我會再試試看的

   今天比較有空,我拿白紙慢慢畫,終於搞懂 KUBI大大為什麼能不用 判斷式來做了
   因為類似索引的方式,畫了快30分鐘~ 解開謎團了(開心~)
   
  原來就是先把所有的配對方法都記錄起來在 d 裡面
   0001+姓名  就是  王小明
   0001+班級  就是 XXX
   以此類推
  
   之後到結果那邊,如果我要的是0002、0003,然後標題我要的是姓名 跟 體重
   那麼0002+姓名 以及 0002+體重 以及 0003+姓名  以及 0003+體重
   都可以從 d裡面去找到上面四個相對應的值
   然後正確顯示出來

  所以不管我結果那邊改成要四種標題  比如姓名、班級、喜好、體重
  或是只改成三種標題
  只要學號+標題
  都能正確地從 d 裡面去索引到相對應的值
  難怪可以不用 判斷式
  厲害!!!

  只是說如果資料再更龐大一些,這種全紀錄的方式,會不會很耗記憶體
  (但目前以我使用的資料量,都還是足以正常使用)
哈囉~大家好呀

TOP

借這個主題再請問一下

比如 1年2月3日  經過程式轉化  可以變成 01年02月03日
但是如果來源只有剩下月  或日
該怎麼辦?  轉化後年月都錯了



第二個問題  現在是6月
我另存新檔想要用年+月+檔名
比如  "10806檔案"
108可能還好,就 Mid(year(Date),1,3) 就得到了
但是月就麻煩了
如果1~9月只有一個數字
10~12月是兩個數字
該怎麼讓檔名自動補0 呢?

第三個問題
然後其實我想要做到的是可以自動存成下個月的
比如現在是六月,但是存起來卻是 "10807檔案" 這樣

以上問題再發問,謝謝




活頁簿1.rar (16.33 KB)
哈囉~大家好呀

TOP

回復 12# iceandy6150


    我自己找到解決方法了,真開心
如果給的資料,是有年有月,比如 1年5月這樣,就用一個做法
如果給的資料,只有月沒有年,比如9月、12月,就用另一辦法
這樣就能改成我自己要的 00年00月 的格式了
  1.   c = .Range("D" & i).Value
  2.   
  3.   If c Like "*年*" Then  '有年有月就用這個方式改格式

  4.    c = Application.Text(Replace(Replace(c, "月", ":"), "年", ":"), "[hh]年mm月")

  5.    Else
  6.    
  7.         f = Split(c, "月")  '如果只有月  判斷是一位數(1~9月)還是兩位數(10~12月)
  8.         
  9.         If Len(f(0)) = 1 Then
  10.            c = "00年0" & f(0) & "月"
  11.         Else
  12.            c = "00年" & f(0) & "月"
  13.         End If

  14.    End If
複製代碼
為什麼要做這個功能呢
是因為來源資料很不一定
有時候是3月  有時候11月  有時候 1年5月、10年11月等等
位數變來變去
用MID很難抽取

然後又要套上規則
如果滿半年就怎樣怎樣---> 先算出年資換算成月是幾月  滿半年就是年資>=6
如果滿一年 --> 年資>=12
用這些條件再來區分各級距的人該下什麼指令

以上小小發現,自問自答
哈囉~大家好呀

TOP

回復 13# iceandy6150

年資??? 可能有如下情形???
1年3月5日
1年5月
1年12日
5月18日
3月
29日

TOP

本帖最後由 n7822123 於 2019-6-20 11:53 編輯

回復 12# iceandy6150


第二個問題  現在是6月
我另存新檔想要用年+月+檔名
比如  "10806檔案"
108可能還好,就 Mid(year(Date),1,3) 就得到了
但是月就麻煩了
如果1~9月只有一個數字
10~12月是兩個數字
該怎麼讓檔名自動補0 呢?


用格式mm即可.............自己試試看:
MsgBox Application.Text(Now, "m/d")
MsgBox Application.Text(Now, "mm/d"))



第三個問題
然後其實我想要做到的是可以自動存成下個月的
比如現在是六月,但是存起來卻是 "10807檔案" 這樣

不多說.....自己試看看:
MsgBox Application.Text(DateSerial(Year(Now), Month(Now) + 1, Day(Now)), "emm")

你應該要學的是,有關時間的函數與格式
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 13# iceandy6150


   
如果滿半年就怎樣怎樣---> 先算出年資換算成月是幾月  滿半年就是年資>=6
如果滿一年 --> 年資>=12
用這些條件再來區分各級距的人該下什麼指令

參考看看

入職日期 = DateValue("6 / 4 / 2014")    '自己設定入職日期
年資 = Application.Text(Now - 入職日期, "yy/mm")
MsgBox "張三年資共" & Split(年資, "/")(0) * 12 + Split(年資, "/")(1) & "個月"
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 14# 准提部林


    年資的確有可能只有日 或 年+日  或 年+月 或年月日都有
但是我處理的資料,是第二手
也就是只有計算到月而已

我拿到的資料要嘛就是 3月、6月、11月這樣
或是1年1月

所以只剩下兩種  年+月  、只有月
但是年,又有分為1位數的跟2位數的,比如3年 跟 12年
月也是分為1位數的跟2位數的,比如4月 跟 11月

所以我只好想辦法來處理
比如說1年以內的人,獎金發3000元
滿1年6月的發4500元

我就先把各種資料,轉成00年00月
再用MID去取,VAL()變成可計算的數字,然後就可以判斷
誰該發3000元,誰該發4500元....以此類推

感謝大大回復喔
哈囉~大家好呀

TOP

回復 16# n7822123


    感謝大大的回覆
因為我手上拿到的資料並沒有到職日
不然照大大這樣寫,是很方便
這些寫法我都會存檔
以後若有用到,就可以派上用場
感謝感謝
哈囉~大家好呀

TOP

回復 13# iceandy6150

Private Sub CommandButton1_Click()
c$ = Replace(Replace(Range("A1"), "年", ":"), "月", "")
If IsNumeric(c) Then c = "0:" & c
c = Application.Text(c, "[hh]年mm月")
Range("B1") = c
End Sub

======================

TOP

回復 15# n7822123


Private Sub CommandButton2_Click()
d& = Evaluate("edate(" & CLng(Date) & ", 1)")
ym$ = Format(d, "emm") & "檔案"
MsgBox ym
End Sub

TOP

        靜思自在 : 每天無所事事,是人生的消費者,積極、有用才是人生的創造者。
返回列表 上一主題