Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


273 / 3841 ページ ←次へ | 前へ→

【76977】Re:ハイパーリンクのファイルの更新日時...
お礼  ko  - 15/4/23(木) 16:44 -

引用なし
パスワード
   おそらく、自己解決しました。

LANでつないだ別のPCから操作した場合に、質問の状態になるようで、
ファイルが保存されているPCで操作すると、正常にデータが更新されていました。

あまり意識していなかったので気づきませんでした。

ありがとうございました。
・ツリー全体表示

【76976】Re:ハイパーリンクのファイルの更新日時...
お礼  ko  - 15/4/23(木) 16:39 -

引用なし
パスワード
   自己解決しました。

あまり重要でないと思って、書いていませんでしたが、
LANでつないだ別のPCから操作した場合に、質問の状態になるようで、
ファイルが保存されているPCで操作すると、正常にデータが更新されていました。

セキュリティの関係でしょうか??
そのあたり、あまり意識していなかったので気づきませんでした。

ありがとうございました。
・ツリー全体表示

【76975】Re:ハイパーリンクのファイルの更新日時...
質問  ko  - 15/4/23(木) 14:42 -

引用なし
パスワード
   追記です。

新しく作成したファイルのハイパーリンクを追加したのですが、
そもそも、更新日時の取得をしてくれません(泣
元ファイルのプロパティの更新日時は正常です。
・ツリー全体表示

【76974】Re:ハイパーリンクのファイルの更新日時...
発言  ko  - 15/4/23(木) 13:37 -

引用なし
パスワード
   独覚さん

ファイルのプロパティ自体は、正確な日時になっています。

あと、日時取得だけで End Subにしておらず、
続けて並べ替えするようにしています。


  ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
  ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C1") _
    , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
  Dim LastRow As Long
  LastRow = Cells(Rows.Count, 1).End(xlUp).Row
  
  With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("a1", "c" & LastRow)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
  
  
End Sub
・ツリー全体表示

【76973】Re:ハイパーリンクのファイルの更新日時...
発言  独覚  - 15/4/23(木) 13:28 -

引用なし
パスワード
   ▼ko さん:
あいにくWindowsXPの環境がないため回答が難しいのですが、そのファイルの

プロパティを直接見たときの更新日付はどうなっていますか?
・ツリー全体表示

【76972】Re:ハイパーリンクのファイルの更新日時...
発言  ko  - 15/4/23(木) 13:19 -

引用なし
パスワード
   βさん、独覚さん、ありがとうございます。

ファイルはローカルにあるものだけですが、
OSがWindowsXPです。やはりOSの問題なのでしょうか・・・
・ツリー全体表示

【76971】Re:ハイパーリンクのファイルの更新日時...
発言  独覚  - 15/4/23(木) 13:07 -

引用なし
パスワード
   ▼ko さん:
何かほかに特記事項はないですか?

私のほうでもWindows7+Excel2007で実行してみましたがローカルファイル、
サーバ(Windowsサーバ2003)上の共有フォルダ上のファイルどちらとも
当日内の更新日時が反映されています。


koさんのところで、OSのバージョン、ファイルがローカルの場合、サーバ上の場合
どちらでも同じ状況なのか?
また、サーバ上のファイルの場合、サーバのOSはなんでしょうか?
・ツリー全体表示

【76970】Re:ハイパーリンクのファイルの更新日時...
発言  β  - 15/4/23(木) 12:12 -

引用なし
パスワード
   ▼ko さん:

追伸で。

1週間前が最終更新日のブックをハイパーリンクで設定して
そのブックを更新して最終更新日を今日にして実行。

やはり、正しく、今日の日時になります。
・ツリー全体表示

【76969】Re:ハイパーリンクのファイルの更新日時...
発言  β  - 15/4/23(木) 12:07 -

引用なし
パスワード
   ▼ko さん:

こんにちは

不思議ですねぇ。
こちら、2007 の環境がなく、そのバージョンでの確認はできないのですが
2013 で 12:00 に更新、そのあと、12:05 に更新。
こうした後、アップされたコードを実行しますと、12:05 になりますが?
・ツリー全体表示

【76968】ハイパーリンクのファイルの更新日時取得
質問  ko E-MAIL  - 15/4/23(木) 11:23 -

引用なし
パスワード
   すみません、何が問題かわからないので、ご教示願います。

ハイパーリンクのファイルの更新日時を取得したいのですが、
マクロを実行しても、実際に更新された日時に変わりません。
おそらく、当日の更新に対応できていないように思われます。

※例えば、23日10:00に実行したとき、23日9:00に更新されたファイルがあっても、それは反映されず、
22日時点で更新されたものだけが反映されている状況です。 

Excel2007です。


Sub Auto_Open()
  Dim rng As Range
  Dim FileName As String
  Dim fso As New FileSystemObject

  ChDir ThisWorkbook.Path
  For Each rng In ActiveSheet.UsedRange
    If rng.Hyperlinks.Count > 0 Then
      FileName = fso.GetAbsolutePathName(rng.Hyperlinks(1).Address)
      If fso.FileExists(FileName) Then
        rng.Offset(0, 1) = fso.GetFile(FileName).DateLastModified
      End If
    End If
  Next
  
 
よろしくおねがいします。
・ツリー全体表示

【76967】Re:VBAで文字列中に「スペース」を挿入し...
質問  β  - 15/4/23(木) 8:27 -

引用なし
パスワード
   ▼γ さん:

もし、お目に留まればご教示をお願いします。

パターンで、(\w|[^\x01-\x7E\xA1-\xDF\s]+) ここまでは理解できました。
そのあとの、(?!\s) の役割が、
( ) でくくっておられますので、これがでてきてもリプレースの対象にはしないで残す。
こういうことなのかなぁと思っていますがそれで、あっていますか?
それと、この 、(?!\s) は、その前の [^\x01-\x7E\xA1-\xDF\s]+)に連続したパターンで
\w ないしは [^\x01-\x7E\xA1-\xDF\s]+)(?!\s)
と考えていいのでしょうか?

で、その中の ? ですが、これは、その前の + に付け加えられている、いわゆる
最短一致のための ? でしょうか。
それなら、 ? は、その前の ( ) 内で +?) でおわらせるように思えますので
きっと解釈が間違っているんだろうなとも思っています。

それと ! ですが、これはメタ文字でしょうか?
手元のメモでは、! は VBAの正規表現メタ文字とは記述されていないのですが
メタ文字だとすれば、全角文字列の最後にスペースがあるものは対象にしないという意味でよろしいでしょうか?

・ツリー全体表示

【76966】Re:VBAで文字列中に「スペース」を挿入し...
発言  γ  - 15/4/22(水) 23:25 -

引用なし
パスワード
   ▼β さん:
ありがとうございます。

>半角、全角混在のA1の文字列を分割して
ということなら、こんな書き方もあるかと思います。

Sub test()
  Dim reg As Object
  Dim s As String
  Dim w As Variant

  s = "AB C全角文字列D 全角文字列EF"
  Set reg = CreateObject("VBScript.RegExp")
  reg.Global = True
  reg.Pattern = "(\w|[^\x01-\x7E\xA1-\xDF\s]+)(?!\s)"

  s = reg.Replace(s, "$1 ")
  Debug.Print s
  ' =>   "A B C 全角文字列 D 全角文字列 E F "

  s = WorksheetFunction.Trim(s)
  w = Split(s)

  Range("A2").Resize(, UBound(w) + 1).Value = w
End Sub
・ツリー全体表示

【76965】Re:VBAで文字列中に「スペース」を挿入し...
発言  β  - 15/4/22(水) 8:21 -

引用なし
パスワード
   ▼γ さん:

なるほど!
勉強になります。

γさんのパターンを拝借して、半角、全角混在のA1の文字列を分割して
A2以降の2行目に半角は1文字1セル、全角は、連続文字1セルに書きこんでみました。

Sub test()
  Dim reg As Object
  Dim s As String
  Dim w As Variant
  
  Rows(2).ClearContents
  s = Range("A1").Value

  Set reg = CreateObject("VBScript.RegExp")
  
  reg.Global = True
  reg.Pattern = "([\x01-\x7E\xA1-\xDF]{1})|([^\x01-\x7E\xA1-\xDF]+)"
  s = reg.Replace(s, "$1 $2 ")
  s = WorksheetFunction.Trim(s)
  w = Split(s)

  Range("A2").Resize(, UBound(w) + 1).Value = w
  
End Sub
・ツリー全体表示

【76964】Re:VBAで文字列中に「スペース」を挿入し...
発言  γ  - 15/4/21(火) 22:51 -

引用なし
パスワード
   正規表現を使った例です。

# 正規表現をご存じなければ、うっちゃっておいて、
# 他のかたの回答を参考にしてください。

Sub test()
  Dim reg As Object
  Dim s As String

  s = "A B C 全角文字列D 全角文字列E F"

  Set reg = CreateObject("VBScript.RegExp")
  reg.Pattern = "([^\x01-\x7E\xA1-\xDF]+)(\S)"
  reg.Global = True
  s = reg.Replace(s, "$1 $2")
  
  Debug.Print s ' 出力=> "A B C 全角文字列 D 全角文字列 E F"

End Sub
・ツリー全体表示

【76963】Re:VBAで文字列中に「スペース」を挿入し...
お礼  初投稿  - 15/4/21(火) 22:11 -

引用なし
パスワード
   ▼kanabun さん:

お礼が遅くなって申し訳ございません
なぜか書き込みができなくて…

いくつかいただいた方法の中から作成中のコードと組み合わせて
使いやすいほうを参考にさせていただきます。

ありがとうございました


>> 「半角スペース」を区切りとしてそれぞれの文字列をセルに代入したい
>
>シートのセルに代入したんでしたね。
>
>>  MsgBox Join(v, " ")
>
>を 以下に変更です。
>
>  v = Split(Join(v))
>  Range("B1").Resize(, UBound(v) + 1).Value = v
・ツリー全体表示

【76962】Re:VBAで文字列中に「スペース」を挿入し...
お礼  初投稿  - 15/4/21(火) 22:09 -

引用なし
パスワード
   ▼β さん:

お礼が遅くなって申し訳ございません
なぜか書き込みができなくて…

いくつかいただいた方法の中から作成中のコードと組み合わせて
使いやすいほうを参考にさせていただきます。

ありがとうございました


>▼初投稿 さん:
>
>>正規表現を使えば、・・・
>
>正規表現では対応できませんね。撤回。
>
>>サンプルです。 A1 にある文字列を B1以降に分割します。
>
>  Range("A1").Parse p, Range("B1")
>
>これを
>
>  Range("A1").Parse p, Range("A1")
>
>にすれば、分割イメージは A1 からセットされます。
・ツリー全体表示

【76961】Re:VBAで文字列中に「スペース」を挿入し...
発言  β  - 15/4/20(月) 22:00 -

引用なし
パスワード
   ▼初投稿 さん:

ループはなくせないんですが、Parseメソッドに与えるパターンを
無理やり(?)正規表現で作成してみました。

Sub Test2()
  Dim reg As Object
  Dim s As String
  Dim w As Variant
  Dim i As Long
  
  s = Range("A1").Value
  Set reg = CreateObject("VBScript.RegExp")
  reg.Pattern = "(.{1})"
  reg.Global = True
  s = reg.Replace(s, "$1 ")
  w = Split(s)
  ReDim Preserve w(LBound(w) To UBound(w) - 1)
  For i = LBound(w) To UBound(w)
    If LenB(StrConv(w(i), vbFromUnicode)) = 2 Then
      w(i) = 2
    Else
      w(i) = 1
    End If
  Next
  
  s = Join(w, "")
  reg.Pattern = "(2+)"
  s = reg.Replace(s, "[$1]")
  s = Replace(s, "2", "x")
  s = Replace(s, "1", "[x]")
  
  Range("A1").Parse s, Range("A1")
  
End Sub
・ツリー全体表示

【76960】Re:VBAで文字列中に「スペース」を挿入し...
発言  kanabun  - 15/4/20(月) 20:18 -

引用なし
パスワード
   > 「半角スペース」を区切りとしてそれぞれの文字列をセルに代入したい

シートのセルに代入したんでしたね。

>  MsgBox Join(v, " ")

を 以下に変更です。

  v = Split(Join(v))
  Range("B1").Resize(, UBound(v) + 1).Value = v
・ツリー全体表示

【76959】Re:VBAで文字列中に「スペース」を挿入し...
発言  β  - 15/4/20(月) 20:06 -

引用なし
パスワード
   ▼初投稿 さん:

>正規表現を使えば、・・・

正規表現では対応できませんね。撤回。

>サンプルです。 A1 にある文字列を B1以降に分割します。

  Range("A1").Parse p, Range("B1")

これを

  Range("A1").Parse p, Range("A1")

にすれば、分割イメージは A1 からセットされます。
・ツリー全体表示

【76958】Re:VBAで文字列中に「スペース」を挿入し...
発言  kanabun  - 15/4/20(月) 19:58 -

引用なし
パスワード
   ▼初投稿 さん:

>【サンプル】
>A B C 全角文字列D 全角文字列E F

半角スペースで分割したそれぞれの部分文字列が 全角文字列と半角文字列に
分れていたら、その境界に スペースを挿入する。

Sub trial()
  Dim i As Long, j As Long
  Dim ss As String, s As String
  Dim v
  ss = "A B C 全角文字列D 全角文字列E F"
  
  v = Split(ss)
  For i = 0 To UBound(v)
    s = v(i)
    For j = Len(s) To 2 Step -1
     If LenA(Mid$(s, j, 1)) <> LenA(Mid$(s, j - 1, 1)) Then
       v(i) = Left$(s, j - 1) & " " & Mid$(s, j)
       Exit For
     End If
    Next
  Next
  MsgBox Join(v, " ")
End Sub

Private Function LenA(s As String) As Long
  LenA = LenB(StrConv(s, vbFromUnicode))
End Function

結果-----
A B C 全角文字列 D 全角文字列 E F
・ツリー全体表示

273 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free