Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
RE.「数式の結果を利用すると数値が出力されない」の「 wgfyhsudji24w」さんへ
投稿日時: 22/09/06 15:51:17
投稿者: WinArrow
投稿者のウェブサイトに移動

https://www.moug.net/faq/viewtopic.php?t=81724

引用:

wsSheet.Range("B1").Formula = "=MID(A1,29,4)"
wsSheet.Range("C1").Formula = "=MID(A1,34,1)"
wsSheet.Range("D1").Formula = "=MID(A1,36,1)"
wsSheet.Range("E1").Formula = "=MID(A1,39,1)"
wsSheet.Range("F1").Formula = "=MID(A1,45,4)"
wsSheet.Range("G1").Formula = "=MID(A1,50,1)"
wsSheet.Range("H1").Formula = "=MID(A1,52,1)"
wsSheet.Range("I1").Formula = "=MID(A1,55,1)

↑のコードは、A1セルの文字列中の年月日(YYYYMDD形式)を分割抽出していると
思いますが、月と日に当たる部分が1桁で指定しています。
例題では、問題ないかもしれませんが、10〜12月や、10〜31日は、問題が発生すると推測します。
  
  
修正案(上から3つだけ)を提示しますので、参考にしてください。
wsSheet.Range("B1").Formula = "=LEFT(MID(A1,29,8),4)"
wsSheet.Range("C1").Formula = "=MID(MID(A1,29,8),5,2)*1"
wsSheet.Range("D1").Formula = "=MID(MID(A1,29,8),7,2)*1"
 

回答
投稿日時: 22/09/06 16:33:37
投稿者: Suzu

解決した との事なので、そのままにしようかと 思っていたのですが
WinArrow さんが、開いてくださったので 便乗して。。
 
値としてセルに保存したいなら別ですが
一般関数を使い、B1〜の値を計算させているのであれば、
最終目的の値も一般関数で良いと思います。
 
A1 に
="Test -StartDate """&TEXT(MID(A1,29,8),"0000!/00!/00 ")&MID(A1,38,2)&":00"""
あとは、オートフィルで・・
 
VBA の勉強なのであれば失礼しました。

回答
投稿日時: 22/09/06 16:58:35
投稿者: simple

引用:
1.
以下「& Range("E1") & Chr(58) & "00" 」を含まない※---をマクロに記載すると、数値部分が消えてしまいます。
Test -StartDate "//"

引用:
2.
以下「& Range("E1") & Chr(58) & "00" 」を含む※---をマクロに記載すると、構文エラーが出ます。

議論をするつもりはありませんが、
それぞれの原因は結局どういうことだったのでしょうか。
もし、ご自身の整理がついているのであれば教えて下さい。
(原因はご自身でも不明で、なんらかの操作ミスだろうということなら、それで結構です。
突き詰めても益はないでしょう。)
 
なお、
質問者さんのコードを離れて、最初から書くとすれば例えばこんな書き方ができると思います。
(ワークシートの指定は敢えて省略して、アクティブシートという前提で書きました。)
>「Test -StartDate "2022/8/6 2:00"」としたいと思っております。
という前提です。
 
Sub test()
    Dim s As String, s1 As String, s2 As String
    Dim k As Long
    
    For k = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        s = Cells(k, "A")
        s = Replace(s, ".csv", "")
        
        'StartDate
        s1 = Replace(Split(s, "-")(1), "_", "")
        s2 = myConvert(s1)
        Cells(k, "B") = "Test -StartDate " & Chr(34) & s2 & Chr(34)
        
        ' EndDAte
        s1 = Replace(Split(s, "-")(2), "_", "")
        s2 = myConvert(s1)
        Cells(k, "C") = "Test -EndDate " & Chr(34) & s2 & Chr(34)
    Next
End Sub

Function myConvert(s As String) As String
    Dim dt As Date
    dt = DateSerial(Left(s, 4), Mid(s, 5, 2), Mid(s, 7, 2)) _
        + TimeSerial(Mid(s, 9, 2), Mid(s, 11, 2), Mid(s, 13, 2))
    myConvert = Format(dt, "yyyy/m/d h:00")
End Function

回答
投稿日時: 22/09/06 17:34:26
投稿者: wgfyhsudji24w

WinArrow さんの引用:
https://www.moug.net/faq/viewtopic.php?t=81724
引用:

wsSheet.Range("B1").Formula = "=MID(A1,29,4)"
wsSheet.Range("C1").Formula = "=MID(A1,34,1)"
wsSheet.Range("D1").Formula = "=MID(A1,36,1)"
wsSheet.Range("E1").Formula = "=MID(A1,39,1)"
wsSheet.Range("F1").Formula = "=MID(A1,45,4)"
wsSheet.Range("G1").Formula = "=MID(A1,50,1)"
wsSheet.Range("H1").Formula = "=MID(A1,52,1)"
wsSheet.Range("I1").Formula = "=MID(A1,55,1)

↑のコードは、A1セルの文字列中の年月日(YYYYMDD形式)を分割抽出していると
思いますが、月と日に当たる部分が1桁で指定しています。
例題では、問題ないかもしれませんが、10〜12月や、10〜31日は、問題が発生すると推測します。
  
  
修正案(上から3つだけ)を提示しますので、参考にしてください。
wsSheet.Range("B1").Formula = "=LEFT(MID(A1,29,8),4)"
wsSheet.Range("C1").Formula = "=MID(MID(A1,29,8),5,2)*1"
wsSheet.Range("D1").Formula = "=MID(MID(A1,29,8),7,2)*1"
 

わざわざ投稿を開いて頂き、誠にありがとうございます。
月と日に当たる部分を1桁で指定してはいけませんね、、
頂きました修正案を元にI1まで指定するようにいたします。ご指摘ありがとうございます。

回答
投稿日時: 22/09/06 17:41:41
投稿者: wgfyhsudji24w

Suzu さんの引用:
解決した との事なので、そのままにしようかと 思っていたのですが
WinArrow さんが、開いてくださったので 便乗して。。
 
値としてセルに保存したいなら別ですが
一般関数を使い、B1〜の値を計算させているのであれば、
最終目的の値も一般関数で良いと思います。
 
A1 に
="Test -StartDate """&TEXT(MID(A1,29,8),"0000!/00!/00 ")&MID(A1,38,2)&":00"""
あとは、オートフィルで・・
 
VBA の勉強なのであれば失礼しました。

 
ご確認ありがとうございます。
 
以下<実施コマンド>のJ1に出力した値を、最終的にA列値が入っているところまでオートフィルのような動作を行いたいと考えており方法を思案しておりました。
確かに関数含めた式をP列に出力してしまい、A列の値が入っている列までオートフィルを行ったほうがroop処理より楽かもしれません。大変助かりました!ありがとうございます。
 
 
<実施コマンド>
Sub Test()
  
Set wsSheet = ThisWorkbook.Worksheets("Sheet2")
  
wsSheet.Range("B1").Formula = "=MID(A1,29,4)"
wsSheet.Range("C1").Formula = "=MID(A1,34,1)"
wsSheet.Range("D1").Formula = "=MID(A1,36,1)"
wsSheet.Range("E1").Formula = "=MID(A1,39,1)"
wsSheet.Range("F1").Formula = "=MID(A1,45,4)"
wsSheet.Range("G1").Formula = "=MID(A1,50,1)"
wsSheet.Range("H1").Formula = "=MID(A1,52,1)"
wsSheet.Range("I1").Formula = "=MID(A1,55,1)"
  
  
If Trim(wsSheet.Range("A1")) <> "" Then
LastROw = wsSheet.Range("A" & Rows.Count).End(xlUp).Row
wsSheet.Range("B1").AutoFill Destination:=wsSheet.Range("B1:B" & LastROw)
wsSheet.Range("C1").AutoFill Destination:=wsSheet.Range("C1:C" & LastROw)
wsSheet.Range("D1").AutoFill Destination:=wsSheet.Range("D1:D" & LastROw)
wsSheet.Range("E1").AutoFill Destination:=wsSheet.Range("E1:E" & LastROw)
wsSheet.Range("F1").AutoFill Destination:=wsSheet.Range("F1:F" & LastROw)
wsSheet.Range("G1").AutoFill Destination:=wsSheet.Range("G1:G" & LastROw)
wsSheet.Range("H1").AutoFill Destination:=wsSheet.Range("H1:H" & LastROw)
wsSheet.Range("I1").AutoFill Destination:=wsSheet.Range("I1:I" & LastROw)
  
Else
    End If
  
         wsSheet.Range("J1").Value _
            = "Test -StartDate " _
              & Chr(34) & Range("B1").Value & "/" _
              & Range("C1").Value & "/" _
              & Range("D1").Value & " " _
              & Range("E1").Value & ":00" & Chr(34)
  
End Sub

回答
投稿日時: 22/09/06 17:49:34
投稿者: wgfyhsudji24w

simple さんの引用:
引用:
1.
以下「& Range("E1") & Chr(58) & "00" 」を含まない※---をマクロに記載すると、数値部分が消えてしまいます。
Test -StartDate "//"

引用:
2.
以下「& Range("E1") & Chr(58) & "00" 」を含む※---をマクロに記載すると、構文エラーが出ます。

議論をするつもりはありませんが、
それぞれの原因は結局どういうことだったのでしょうか。
もし、ご自身の整理がついているのであれば教えて下さい。
(原因はご自身でも不明で、なんらかの操作ミスだろうということなら、それで結構です。
突き詰めても益はないでしょう。)
 
なお、
質問者さんのコードを離れて、最初から書くとすれば例えばこんな書き方ができると思います。
(ワークシートの指定は敢えて省略して、アクティブシートという前提で書きました。)
>「Test -StartDate "2022/8/6 2:00"」としたいと思っております。
という前提です。
 
Sub test()
    Dim s As String, s1 As String, s2 As String
    Dim k As Long
    
    For k = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        s = Cells(k, "A")
        s = Replace(s, ".csv", "")
        
        'StartDate
        s1 = Replace(Split(s, "-")(1), "_", "")
        s2 = myConvert(s1)
        Cells(k, "B") = "Test -StartDate " & Chr(34) & s2 & Chr(34)
        
        ' EndDAte
        s1 = Replace(Split(s, "-")(2), "_", "")
        s2 = myConvert(s1)
        Cells(k, "C") = "Test -EndDate " & Chr(34) & s2 & Chr(34)
    Next
End Sub

Function myConvert(s As String) As String
    Dim dt As Date
    dt = DateSerial(Left(s, 4), Mid(s, 5, 2), Mid(s, 7, 2)) _
        + TimeSerial(Mid(s, 9, 2), Mid(s, 11, 2), Mid(s, 13, 2))
    myConvert = Format(dt, "yyyy/m/d h:00")
End Function


 
1.
以下「& Range("E1") & Chr(58) & "00" 」を含まない※---をマクロに記載すると、数値部分が消えてしまいます。
Test -StartDate "//"
 
simpleさんに記載頂きました↓以下に変更させて頂きましたら解消しました。
こちら私の一行羅列による記述ミスかと思っております。
 
 
Worksheets(Sheet1).Range("F1").Value = "Test" & Chr(32) & "-StartDate" & Chr(32) & Chr(34) & Range("B1").Value & Chr(47) & Range("C1").Value & Chr(47) & Range("D1").Value & Chr(32) & Range("E1") & Chr(58) & "00"
 

 
         wsSheet.Range("J1").Value _
            = "Test -StartDate " _
              & Chr(34) & Range("B1").Value & "/" _
              & Range("C1").Value & "/" _
              & Range("D1").Value & " " _
              & Range("E1").Value & ":00" & Chr(34)
 
 
 
2.
以下「& Range("E1") & Chr(58) & "00" 」を含む※---をマクロに記載すると、構文エラーが出ます。
 
→記述ミスです。
 
 
ご確認および玄人なコマンドを記載いただき、ありがとうございます。
VBA素人のため、参考にさせていただきます。

回答
投稿日時: 22/09/06 22:19:40
投稿者: simple

コメントありがとうございます。
# 別に玄人ではありません。
 
MMYS さんの代理で確認させてください。
 
前のスレッドの話に戻りますが。
投稿日時: 22/09/06 10:12:31投稿者: wgfyhsudji24w

wgfyhsudji24w さんの引用:
初回投稿時のマクロ修正し、以下マクロ全文より、MMYSさんに頂いたコード分解を試しましたが、J1セルに出力される文言は「Test -StartDate "// :00」となります。

とありますが、
Debug.Print a
Debug.Print b
Debug.Print c
Debug.Print d
Debug.Print e
  
j = a & b & c & d & e
Debug.Print j
のイミディエイトウインドウへの出力結果をお知らせ下さい。
そしてそのときの、B1セル〜E1セルに入っている値を教えてください。

回答
投稿日時: 22/09/07 06:32:38
投稿者: simple

引用:
以下「& Range("E1") & Chr(58) & "00" 」を含まない※---をマクロに記載すると、数値部分が消えてしまいます。
Test -StartDate "//"
(..中略..)
こちら私の一行羅列による記述ミスかと思っております。
とのことですが、
最初の質問の主要部分がまったく解決されていないと思います。
ご自分のコードのどこが原因で、数値部分が消えるという事象の説明がつきますか?
 
そのためにMMYS さんが懇切丁寧に調べ方まで提案してくださっているのに、
それをまったく生かそうとされないのは、非常に残念です。
 
他人が書いたコードが動いたからそれでいい、ということでは全くありません。
そんなの全く解決になっていないじゃないですか。
 
コード作成上の考え違いもしくはコード実行にあたっての考え違いが
まるで解消されていないので、同じことを今後も繰り返すことになります。
 
提案に応えて、Debug.Printの内容を示してみたらいかがですか?
 
各セルの情報が反映されない理由を是が非でも明確にすべきです。
そうしたことをすっ飛ばしていると、ご自分のスキルアップにつながらないと懸念します。

回答
投稿日時: 22/09/07 09:35:04
投稿者: めいぷる

最初の投稿の最後にコメント入れたのですが、時間差で閉じられてしまったので
気付かなかったら仕方ないと思っていましたが、せっかくWinArrowさんがスレを立てて下さったので
便乗させて頂きます。
 
以下の部分大丈夫ですか?
Range("B1").Valueにワークシートの指定がありません。(C1〜E1も同様)
  
         wsSheet.Range("J1").Value _
            = "Test -StartDate " _
              & Chr(34) & Range("B1").Value & "/" _
              & Range("C1").Value & "/" _
              & Range("D1").Value & " " _
              & Range("E1").Value & ":00" & Chr(34)
  
Worksheets("Sheet2")以外のシートがActiveの状態で実行するとうまくいかないと思います。

投稿日時: 22/09/07 10:09:23
投稿者: WinArrow
投稿者のウェブサイトに移動

wgfyhsudji24wさんへ
 

引用:

Worksheets(Sheet1).Range("F1").Value = "Test" & Chr(32) & "-StartDate" & Chr(32) & Chr(34) & Range("B1").Value & Chr(47) & Range("C1").Value & Chr(47) & Range("D1").Value & Chr(32) & Range("E1") & Chr(58) & "00"
  

  
         wsSheet.Range("J1").Value _
            = "Test -StartDate " _
              & Chr(34) & Range("B1").Value & "/" _
              & Range("C1").Value & "/" _
              & Range("D1").Value & " " _
              & Range("E1").Value & ":00" & Chr(34)
 

 
↑がファイナルアンサーでしょうか?
 
めいぷるさんのレスにもあるように、問題が発生する可能性があります。
 
simpleさんのレスで
>Test -StartDate "//"
が解決したわけでもありません。
1つのデータだけテストして、「うなくいった」と喜んでいては、
スキルアップにはなりません。
折角のアドバイスを無駄にしないことです。
 
真の原因を突き止めるためにも
入りろなパターンで検証することをお勧めしますう。
 
 
 

投稿日時: 22/09/07 17:17:47
投稿者: WinArrow
投稿者のウェブサイトに移動

1つ気になるところ
 
A列セルに入っているデータは、CSVのファイル名ですよね?
>TestDaysigninlog_20220806_*-20220806_020000-20220806_030000.csv
先頭に「Testday・・・」のように「Test」がついています。
今後、このファイル名が変わる可能性があれば、
MIDで桁位置指定を変更する必要があります。
それよりも、simpleさんのレス(Function myConvert)のような、対応の方がよいと考えます。
 
 

回答
投稿日時: 22/09/07 17:18:25
投稿者: wgfyhsudji24w

simple さんの引用:
コメントありがとうございます。
# 別に玄人ではありません。
 
MMYS さんの代理で確認させてください。
 
前のスレッドの話に戻りますが。
投稿日時: 22/09/06 10:12:31投稿者: wgfyhsudji24w
wgfyhsudji24w さんの引用:
初回投稿時のマクロ修正し、以下マクロ全文より、MMYSさんに頂いたコード分解を試しましたが、J1セルに出力される文言は「Test -StartDate "// :00」となります。

とありますが、
Debug.Print a
Debug.Print b
Debug.Print c
Debug.Print d
Debug.Print e
  
j = a & b & c & d & e
Debug.Print j
のイミディエイトウインドウへの出力結果をお知らせ下さい。
そしてそのときの、B1セル
〜E1セルに入っている値を教えてください。

 
 
ご確認ありがとうございます。以下状況です。
 
---<実行コマンド>--
  Sub Test()
  
Set wsSheet = ThisWorkbook.Worksheets("Sheet2")
  
wsSheet.Range("B1").Formula = "=MID(A1,29,4)"
wsSheet.Range("C1").Formula = "=MID(A1,34,1)"
wsSheet.Range("D1").Formula = "=MID(A1,36,1)"
wsSheet.Range("E1").Formula = "=MID(A1,39,1)"
wsSheet.Range("F1").Formula = "=MID(A1,45,4)"
wsSheet.Range("G1").Formula = "=MID(A1,50,1)"
wsSheet.Range("H1").Formula = "=MID(A1,52,1)"
wsSheet.Range("I1").Formula = "=MID(A1,55,1)"
  
  
If Trim(wsSheet.Range("A1")) <> "" Then
LastROw = wsSheet.Range("A" & Rows.Count).End(xlUp).Row
wsSheet.Range("B1").AutoFill Destination:=wsSheet.Range("B1:B" & LastROw)
wsSheet.Range("C1").AutoFill Destination:=wsSheet.Range("C1:C" & LastROw)
wsSheet.Range("D1").AutoFill Destination:=wsSheet.Range("D1:D" & LastROw)
wsSheet.Range("E1").AutoFill Destination:=wsSheet.Range("E1:E" & LastROw)
wsSheet.Range("F1").AutoFill Destination:=wsSheet.Range("F1:F" & LastROw)
wsSheet.Range("G1").AutoFill Destination:=wsSheet.Range("G1:G" & LastROw)
wsSheet.Range("H1").AutoFill Destination:=wsSheet.Range("H1:H" & LastROw)
wsSheet.Range("I1").AutoFill Destination:=wsSheet.Range("I1:I" & LastROw)
  
Else
    End If
     
a = "Test" & Chr(32) & "-StartDate" & Chr(32) & Chr(34)
b = Range("B1").Value & Chr(47)
c = Range("C1").Value & Chr(47)
d = Range("D1").Value & Chr(32)
e = Range("E1").Value & Chr(58) & "00"
  
'f = "Test" & Chr(32) & "-EndDate" & Chr(32) & Chr(34)
'g = Range("B1").Value & Chr(47)
'h = Range("C1").Value & Chr(47)
'i = Range("D1").Value & Chr(32)
'j = Range("E1").Value & Chr(58) & "00"
  
  
Debug.Print a
Debug.Print b
Debug.Print c
Debug.Print d
Debug.Print e
  
'Debug.Print f
'Debug.Print g
'Debug.Print h
'Debug.Print i
'Debug.Print j
  
j = a & b & c & d & e
'& f & g & h & i& j
  
  
Debug.Print j
  
wsSheet.Range("J1").Value = j
  
End Sub
 
---
 
---<イミディエイトウィンドウ>---
Test -StartDate "
/
/
---------------------
 
---<Excel セルに表示された値>---
-A1〜A14
TestDaysigninlog_20220806_*-20220806_020000-20220806_030000.csv
TestDaysigninlog_20220806_*-20220806_030000-20220806_040000.csv
TestDaysigninlog_20220806_*-20220806_050000-20220806_060000.csv
TestDaysigninlog_20220806_*-20220806_060000-20220806_070000.csv
TestDaysigninlog_20220806_*-20220806_070000-20220806_080000.csv
TestDaysigninlog_20220806_*-20220806_080000-20220806_090000.csv
TestDaysigninlog_20220806_*-20220806_090000-20220806_100000.csv
TestDaysigninlog_20220806_*-20220806_100000-20220806_110000.csv
TestDaysigninlog_20220806_*-20220806_110000-20220806_120000.csv
TestDaysigninlog_20220806_*-20220806_120000-20220806_130000.csv
TestDaysigninlog_20220806_*-20220806_130000-20220806_140000.csv
TestDaysigninlog_20220806_*-20220806_140000-20220806_150000.csv
TestDaysigninlog_20220806_*-20220806_150000-20220806_160000.csv
TestDaysigninlog_20220806_*-20220806_160000-20220806_170000.csv
-B1〜B14
2022
-C1〜C14
8
-D1〜D14
6
-E1〜E14
E1:2
E23
E3:5
E4:6
E5:7
E6:8
E7:9
E8:0
E9:1
E10:2
E11:3
E12:4
E13:5
E14:6
 
 
 

回答
投稿日時: 22/09/07 17:20:07
投稿者: wgfyhsudji24w

simple さんの引用:
引用:
以下「& Range("E1") & Chr(58) & "00" 」を含まない※---をマクロに記載すると、数値部分が消えてしまいます。
Test -StartDate "//"
(..中略..)
こちら私の一行羅列による記述ミスかと思っております。
とのことですが、
最初の質問の主要部分がまったく解決されていないと思います。
ご自分のコードのどこが原因で、数値部分が消えるという事象の説明がつきますか?
 
そのためにMMYS さんが懇切丁寧に調べ方まで提案してくださっているのに、
それをまったく生かそうとされないのは、非常に残念です。
 
他人が書いたコードが動いたからそれでいい、ということでは全くありません。
そんなの全く解決になっていないじゃないですか。
 
コード作成上の考え違いもしくはコード実行にあたっての考え違いが
まるで解消されていないので、同じことを今後も繰り返すことになります。
 
提案に応えて、Debug.Printの内容を示してみたらいかがですか?
 
各セルの情報が反映されない理由を是が非でも明確にすべきです。
そうしたことをすっ飛ばしていると、ご自分のスキルアップにつながらないと懸念します。

 
 
ご返信ありがとうございます、おっしゃる通りです。Debug.Printの結果を出力しました。

回答
投稿日時: 22/09/07 17:26:07
投稿者: wgfyhsudji24w

めいぷる さんの引用:
最初の投稿の最後にコメント入れたのですが、時間差で閉じられてしまったので
気付かなかったら仕方ないと思っていましたが、せっかくWinArrowさんがスレを立てて下さったので
便乗させて頂きます。
 
以下の部分大丈夫ですか?
Range("B1").Valueにワークシートの指定がありません。(C1〜E1も同様)
  
         wsSheet.Range("J1").Value _
            = "Test -StartDate " _
              & Chr(34) & Range("B1").Value & "/" _
              & Range("C1").Value & "/" _
              & Range("D1").Value & " " _
              & Range("E1").Value & ":00" & Chr(34)
  
Worksheets("Sheet2")以外のシートがActiveの状態で実行するとうまくいかないと思います。

現状Sheet2以外の他のシートはSheet1のみでマクロ起動ボタンを設置している状況です。
 
以下承知しました。
>Worksheets("Sheet2")以外のシートがActiveの状態で実行するとうまくいかないと思います。
 
質問が解決したらクローズすべきと考えておりました。今後はしっかり原因解決までしたらクローズするようにします。
ご指摘ありがとうございます。

回答
投稿日時: 22/09/07 17:33:30
投稿者: wgfyhsudji24w

WinArrow さんの引用:
wgfyhsudji24wさんへ
 
引用:

Worksheets(Sheet1).Range("F1").Value = "Test" & Chr(32) & "-StartDate" & Chr(32) & Chr(34) & Range("B1").Value & Chr(47) & Range("C1").Value & Chr(47) & Range("D1").Value & Chr(32) & Range("E1") & Chr(58) & "00"
  

  
         wsSheet.Range("J1").Value _
            = "Test -StartDate " _
              & Chr(34) & Range("B1").Value & "/" _
              & Range("C1").Value & "/" _
              & Range("D1").Value & " " _
              & Range("E1").Value & ":00" & Chr(34)
 

 
↑がファイナルアンサーでしょうか?
 
めいぷるさんのレスにもあるように、問題が発生する可能性があります。
 
simpleさんのレスで
>Test -StartDate "//"
が解決したわけでもありません。
1つのデータだけテストして、「うなくいった」と喜んでいては、
スキルアップにはなりません。
折角のアドバイスを無駄にしないことです。
 
真の原因を突き止めるためにも
入りろなパターンで検証することをお勧めしますう。
 
 
 

作成完了を優先してましたため、検証不足でした。
皆さんにご指摘頂くまでトラブルシューティングの方法もイミディエイトウィンドウも確認不足でした。
 
問題が発生しないファイナルアンサーを出せるよう時間をかけてみます。
ご助言ありがとうございます。

回答
投稿日時: 22/09/07 17:42:40
投稿者: simple

投稿日時: 22/09/07 17:18:25 での回答拝見しました。
 
イミディエイトウインドウに出力されている内容と、
あなたが提示されたワークシートの内容が不一致になっています。
 
それこそが想定しない結果が表示された原因だと思いますが、
あなたはどのように解釈されましたか?
念のため、ご自身の言葉でお書きください。
 
マクロを起動するボタンはどのシートにあるのですか?
それとSheet2との関係は?

回答
投稿日時: 22/09/07 17:54:11
投稿者: wgfyhsudji24w

WinArrow さんの引用:
1つ気になるところ
 
A列セルに入っているデータは、CSVのファイル名ですよね?
>TestDaysigninlog_20220806_*-20220806_020000-20220806_030000.csv
先頭に「Testday・・・」のように「Test」がついています。
今後、このファイル名が変わる可能性があれば、
MIDで桁位置指定を変更する必要があります。
それよりも、simpleさんのレス(Function myConvert)のような、対応の方がよいと考えます。
 
 

CSVファイル名の変更はないです。変更がある場合は参考にさせていただきます。
ご確認ありがとうございます。

回答
投稿日時: 22/09/07 18:14:11
投稿者: wgfyhsudji24w

simple さんの引用:
投稿日時: 22/09/07 17:18:25 での回答拝見しました。
 
イミディエイトウインドウに出力されている内容と、
あなたが提示されたワークシートの内容が不一致になっています。
 
それこそが想定しない結果が表示された原因だと思いますが、
あなたはどのように解釈されましたか?
念のため、ご自身の言葉でお書きください。
 
マクロを起動するボタンはどのシートにあるのですか?
それとSheet2との関係は?

Sheet1にマクロを起動させるボタンを配置しており、
Sheet2に結果を出力するようにしております。
Set wsSheet = ThisWorkbook.Worksheets("Sheet2")
 
シート名の誤りでなく、投稿日時: 22/09/07 17:18:25に送付した<実施コマンド>の記述ミスでした。
 
j = a & b & c & d & e
'& f & g & h & i& j配下の
   
無駄に配置してしまった Debug.Print j を削除したら、
イミディエイトウィンドウにおいても
以下出力され、想定通りとなりました。
8/
6
2:00

回答
投稿日時: 22/09/07 18:47:52
投稿者: simple

引用:
シート名の誤りでなく、投稿日時: 22/09/07 17:18:25に送付した<実施コマンド>の記述ミスでした。
22/09/07 17:18:25に記載のコードはコピーペイストしたものですから、それは変更せずに議論しましょう。
 
引用:
j = a & b & c & d & e
'& f & g & h & i& j配下の
    
無駄に配置してしまった Debug.Print j を削除したら、
イミディエイトウィンドウにおいても
以下出力され、想定通りとなりました。
8/
6
2:00

なぜ、無駄に配置してしまった Debug.Print j を削除したら、
ということになるのですか?
文字列連結の結果を確認するために追加されているものだから重要でしょう?
・文字列連結するときの材料になる各要素をa,b,c,d,e,fとして出力、
・連結した結果をj にしている訳でしょう?
つまり実際にコードで実行していることが、
イミディエイトウインドウに出力されるa,b,c,d,e,f,jを見ることで確認ができる、
とこういうことですよね。
 
無駄に配置してしまった Debug.Print j を削除したら、
イミディエイトウィンドウにおいても
以下出力され、想定通りとなりました。
8/
6
2:00

それは何を目的にしたものですか?
どのようにして、その出力結果が得られたのですか?
Debug.Print j を削除しただけですから、
jは表示されなくなりますが、他の出力結果が変わるはずがありません。
 
想定する結果になるように辻褄合わせをすることが目的ではありません。
あくまで、コードはどのような処理をしたのか、をあなたが確認するためのものですから。
 
【念のための事実確認です。以下は正しいですか?】
・マクロボタンがあるのはSheet1
・マクロの起動は、そのボタンをクリックして実行した。
・だから、その時、アクティブなシートは Sheet1である。
・データがあるのはSheet2
・Sheet2のA列のデータをもとに、Sheet2以降に文字列を切り出した。

投稿日時: 22/09/07 18:48:48
投稿者: WinArrow
投稿者のウェブサイトに移動

>シート名の誤りでなく、投稿日時: 22/09/07 17:18:25に送付した<実施コマンド>の記述ミスでした。
  
まだ、明確に理解できていないと思われます。
 

引用:

         wsSheet.Range("J1").Value _
            = "Test -StartDate " _
              & Chr(34) & Range("B1").Value & "/" _
              & Range("C1").Value & "/" _
              & Range("D1").Value & " " _
              & Range("E1").Value & ":00" & Chr(34)

↑のコードで
Sheet2をセルを参照しているのは、
>wsSheet.Range("J1").Value
だけで、
他の
Range("B1").value
Range("C1").value
Range("D1").value
Range("E1").value
は、全て「Sheet1」を参照しています。
記述ミス・・・で片付けずに
この仕組みが分かるまで、解析してください。
 
 
 

回答
投稿日時: 22/09/07 20:34:11
投稿者: simple

ご自分で気づかれることを期待して、ヒントも色々とちりばめましたが、
こちらの時間も大切なので、以下、最後のコメントとしておきます。
 
イミディエイトウインドウで確認したら、えーーなんで? と普通なりますよ。
b = Range("B1").Value & Chr(47)
Debug.Print b
で、なぜ "/"だけの出力になってしまうのか、を考えることになります。
 
Sheet2のB1セルを取得しないといけないのに、シートの指定がないからです。
 
シート指定がなければ、そのときにアクティブであるシートが対象になりますから、
Sheet1のB1セルを見に行っているわけです。
 
これが原因だったと分かります。
------------------
前スレッドでの、私の22/09/06 08:44:42での発言をよく読んでください。

引用:
提示されたコードの右辺にはシートの指定がないので、以下の点に注意してください。
・標準モジュールに書いたコードなら、
  現在のアクティブシートのセルを参照します。
・シートモジュールに書いたコードなら、
  アクティブシートの如何にかかわらず、コードが書かれたシートが前提になります。
複数のシートを使いわけているなら、右辺のRangeオブジェクトに対しても
シートを指定すべきでしょう。(With ステートメントを使うと良いでしょう)
なお、シートはひとつしかないとか、二つにまたがって使うことは考えられないということなら、
シートの指定は左右とも不要でしょう。

おわりに。
こまごまとしたことを申し上げました。
こうした細かいことにうんざりし、やる気が失せたかもしれませんが、
プログラムを利用するというのはこういうことです。
こうした話は避けられないものと承知おき下さい。

回答
投稿日時: 22/09/08 13:51:39
投稿者: wgfyhsudji24w

貴重なお時間を割いてご返答ありがとうございました。
 
ただ、皆さんのスキルレベルと私のスキルレベルは異なります(ため、質問させて頂きました)。
(既に記載している通り、トラブルシューティングの方法もイミディエイトウィンドウも、
分からなかった、また丁寧にこのような書き方ができますと頂いた内容も一つ一つの文法もまだ解析している段階のVBAについては素人です)
ご記載頂いている事が即座に分かるスキルレベルではございません。
そのため、理解には時間がかかります。
 
質問はできても皆さんからご助言頂いた内容を
噛み砕いて返答をするのに時間がかかりますため、返答にも時間がかかります。
 
漁夫の利をするつもりはなく、頂いたコマンドの解析を行っておりました。
(ただ時間がかかっておりコメントに即座に返答できるほどの内容は出せておりません)
 
理解ができていないと言われてしまいましたが、
人それぞれ培ってきた経験が異なる事、
理解に要する時間が異なる事はご理解頂けなかったのでしょうか。
 
 
気軽に空いた時間に質問、返答するような掲示板かと思いましたが、
心が追い詰められました。
 
有限の時間を割いてこの場に記載頂いた皆さん(私含む)が、
お忙しい中ご確認頂いているかと存じます。
 
今後は質問者が求めない限りは改めてケースを開いて頂く必要はないかと思います。
(求めていたら質問者自身が新たにケースを開くかクローズしないと思います)
 
細かいご助言を頂いた事はありがたく思っております。
ただ、私は返答内容に追い詰められてしまったので、スキルレベルはご理解頂けたらと思います。
 
今後質問に対しご回答頂ける場合は、
質問者のスキルレベル、質問者が求めているか、をご確認頂けるとなお、ありがたいかと思います。
 
VBAではなく他の言語では細かいレビューも経験済みですので、細かいご指摘は本当にありがたかったです。
ですが、理解できていないもう一度のような繰り返し返答を求めるような内容は不要かと思います。
 
私がこちらを利用する事はもうないと思いますため、これ以上の返答はいたしません。
 
ご丁寧な回答を頂き、誠にありがとうございました。

投稿日時: 22/09/09 17:43:55
投稿者: WinArrow
投稿者のウェブサイトに移動

不快な思いをさせてしまったら、申し訳ありませんでした。
 
たまたま、うまくいったということで、解決した
かもしれませんが、最初の質問がうやむやのまま、閉じてしまうと、
アドバイスが通じたのか不安になり、
回答者側にもわだかまりが残ってしまいます。
 
これで閉じます。