Excel VBA質問箱 IV

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

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


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

【76086】Re:日付表示について
発言  γ  - 14/9/20(土) 10:05 -

引用なし
パスワード
   こちらのサイトの「基本方針」に以下の記載があります。

> ●必ず返事をしてください
> 回答がついたら、その回答に必ず返事を書いてください。
> それが最低限のエチケットというものです。
> 期待通りの回答があれば感謝の意を表すことはもちろん、
> 期待した回答ではない場合も必ず返事を書いてください。
> どこがどう期待通りではないのかを具体的に書けば、
> よりあなたの期待に近い回答が得られることでしょう。

一方向の個人サポートということではなく、「そうした議論を皆さんで
共有しましょう」というコンセプトの上に成り立っています。
助言を得た場合には、その結果を報告してもらうと良いでしょう。
よろしくね。
・ツリー全体表示

【76085】Re:入力フォーム
発言  カリーニン  - 14/9/20(土) 0:12 -

引用なし
パスワード
   kanabunさんすみません。衝突しちゃいました。

あと、私のコードはtxtを選択するようになってましたので

>Ret = Application.GetOpenFilename("テキストファイル(*.txt),*.txt")

↓のように変更しておためしください。

Ret = Application.GetOpenFilename("CSVファイル(*.csv),*.csv")
・ツリー全体表示

【76084】Re:入力フォーム
発言  カリーニン  - 14/9/20(土) 0:07 -

引用なし
パスワード
   ダイアログで選択させる方法です。

14 . ユーザーからの入力を受け付ける
ht tp://www.big.or.jp/~seto/vbaref/vbaref14.htm

ダイアログで開くフォルダを指定する場合は↓が参考になると思います。

ファイルを開くダイアログではじめに開くフォルダを設定する
ht tp://vbaexcel.seesaa.net/article/148313379.html

なお、デスクトップは

CreateObject("WScript.Shell").SpecialFolders("Desktop")

とすれば現在のユーザーのデスクトップを指定できます。

ダイアログでファイルを選択するコードのサンプルです。

Dim WSH As Object
Dim crdr As String
Dim Ret As Variant

Set WSH = CreateObject("WScript.Shell")
'カレントディレクトリ取得
crdr = CreateObject("WScript.Shell").CurrentDirectory

'カレントディレクトリ変更/今回はデスクトップに変更
CreateObject("WScript.Shell").CurrentDirectory = CreateObject("WScript.Shell").SpecialFolders("Desktop")

'読み込むファイルをダイアログで指定
Ret = Application.GetOpenFilename("テキストファイル(*.txt),*.txt")

'キャンセルの場合
If Ret = False Then
  MsgBox "キャンセルが選択されました。"
  'カレントディレクトリを戻す
  CreateObject("WScript.Shell").CurrentDirectory = crdr
  '終了
  Exit Sub
End If

'ダイアログで選択したファイルのパス
MsgBox ret
'テキスト読み込みのコードをここに書く

'カレントディレクトリを戻す
CreateObject("WScript.Shell").CurrentDirectory = crdr
・ツリー全体表示

【76083】Re:入力フォーム
発言  kanabun  - 14/9/20(土) 0:03 -

引用なし
パスワード
   ▼勉強中 さん:
> 下の記述を改良して,マクロボタンを押すと,入力フォームのようなものが画面上にあらわれて,そこに例えば,「計算書1」や「収益表」と手入力して,OKボタンやENTERを押せば,デスクトップ上の当該名前のCSVファイルのデータを取り込むような記述にする方法を探しています。
>

そのQueryTables のまえに ファイル選択ダイアログを出すようにすれば、
ご希望の動作になるかと思います。

'------------------------------------------------------- 標準モジュール
Option Explicit
Declare Function SetCurrentDirectoryA Lib "kernel32" _
   (ByVal lpPathName As String) As Long
  
Sub データ取込()
  Dim deskTop$
  Dim csvName
  
  deskTop = CreateObject("WScript.Shell").SpecialFolders("Desktop")
  SetCurrentDirectoryA deskTop
  csvName = Application.GetOpenFilename("CSV,*.csv")
  If VarType(csvName) = vbBoolean Then Exit Sub
  
  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & csvName, Destination:=Range("A1"))
    .Name = CreateObject("Scripting.FileSystemObject"). _
        GetBaseName(csvName)

  (以下、略)

  (最後は、以下のようにするといいですよ)

    .Refresh BackgroundQuery:=False
    .Delete
  End With
・ツリー全体表示

【76082】入力フォーム
質問  勉強中  - 14/9/19(金) 23:05 -

引用なし
パスワード
   お世話になります。
はじめて利用させていただきます。
現在,下の内容を,ボタンに登録して,マクロ実行し,デスクトップ上の特定のCSVファイルデータ(「計算書」というファイル名のもの)をエクセルに取り込んでいます。

下記のままだと,マクロボタンを押して,データを取り込む前にその都度に取り込みたいデータ元となるデスクトップ上のCSVデータのファイル名を「計算書」として訂正しておかなければなりません。デスクトップ上のCSVファイルとしては「計算書1」や「収益表」と名前もついているものもあるので,それらのデータを取り込みたい際にも毎回ファイル名を「計算書」と訂正している状態です・・・。

そこで質問なのですが,下の記述を改良して,マクロボタンを押すと,入力フォームのようなものが画面上にあらわれて,そこに例えば,「計算書1」や「収益表」と手入力して,OKボタンやENTERを押せば,デスクトップ上の当該名前のCSVファイルのデータを取り込むような記述にする方法を探しています。

本,ネットなどを見て探してみましたが,よく分かりませんでした。
どなたかご教示いただければ幸いです。

どうかよろしくお願いいたします。


Sub データ取込()
  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\Documents and Settings\Owner\デスクトップ\計算書.csv", Destination:=Range( _
    "A1"))
    .Name = "計算書"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 932
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
  End With
End Sub
・ツリー全体表示

【76081】Re:日付表示について
発言  γ  - 14/9/19(金) 0:09 -

引用なし
パスワード
   >トライしてみます。
トライ結果を書いて欲しいですね。
そうしたフィードバックをすることが質問者さんの礼儀だと思います。
自分だけコードが得られてハッピイというわけでもないでしょう。
・ツリー全体表示

【76080】Re:合致しなければ別シートへ
お礼  トキノハジメ  - 14/9/17(水) 7:56 -

引用なし
パスワード
   ▼γ さん:
>横入り失礼します。
>
>「問」が連続してますね。
>
>こういうことですかね。
>
>Sub test()
>  Dim flag As Boolean
>
>  Worksheets("Aシート").Select  'これも不要だろうが。
>  flag = False        ' 初期値は Falseなので、実は不要です。
>
>  For k = 1 To 18
>    If Cells(3, k).Value <> Cells(5, k).Value Then
>      flag = True
>      Exit For
>    End If
>  Next
>
>  If flag = True Then
>    Worksheets("Bシート").Select
>  Else
>    Range("A1").Select
>  End If
>End Sub

ありがとうございました。これからも宜しくお願い致します。
・ツリー全体表示

【76079】Re:合致しなければ別シートへ
発言  γ  - 14/9/16(火) 21:19 -

引用なし
パスワード
   Dim k As Long を漏らしてしまいました。補充してください。
・ツリー全体表示

【76078】Re:合致しなければ別シートへ
発言  γ  - 14/9/16(火) 21:15 -

引用なし
パスワード
   横入り失礼します。

「問」が連続してますね。

こういうことですかね。

Sub test()
  Dim flag As Boolean

  Worksheets("Aシート").Select  'これも不要だろうが。
  flag = False        ' 初期値は Falseなので、実は不要です。

  For k = 1 To 18
    If Cells(3, k).Value <> Cells(5, k).Value Then
      flag = True
      Exit For
    End If
  Next

  If flag = True Then
    Worksheets("Bシート").Select
  Else
    Range("A1").Select
  End If
End Sub
・ツリー全体表示

【76077】Re:合致しなければ別シートえ
質問  トキノハジメ  - 14/9/16(火) 18:45 -

引用なし
パスワード
   ▼独覚 さん:
ありがとうございます。表現がまずくてすみません。
Aシートのとどまる時は Range("A1").Select 
Bシートに替えるは Worksheets("Bシート").Select
のようにしたいのですが、よろしくお願いいたします。
・ツリー全体表示

【76076】Re:日付表示について
お礼  素人です  - 14/9/16(火) 17:34 -

引用なし
パスワード
   返事が遅くなりすいませんでした、ありがとうございます。
トライしてみます。
・ツリー全体表示

【76075】Re:合致しなければ別シートえ
質問  独覚  - 14/9/16(火) 16:12 -

引用なし
パスワード
   ▼トキノハジメ さん:
>Aシートにとどまり、もし違えば、Bシートえ替えたいのですが。
とどまる、替えるとは具体的にどうなればいいのでしょうか?
・ツリー全体表示

【76074】合致しなければ別シートえ
質問  トキノハジメ  - 14/9/16(火) 15:59 -

引用なし
パスワード
   いつもお世話になります。

Aシートに

  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R
3 11  6  9 13  5 15  3 12  1 14  8 16  2 10  3  7  4 16

5 11  6  9 13  5 15  3 12 14  1  8 16  2 10  3  7  4 16

上記の表でA,B,C,D,E,F,G,・・・・と見ていき3列と5列が同じ数字であれば

Aシートにとどまり、もし違えば、Bシートえ替えたいのですが。

上記の表でわI列とJ列がちがっています。

よろしくお願い致します。  
・ツリー全体表示

【76073】Re:日付表示について
発言  γ  - 14/9/15(月) 22:30 -

引用なし
パスワード
   Range("A1").NumberFormatLocal = "dd-mmm-yy"
のような書式にして、Date型数値をValueにセットする方法もありますね。
・ツリー全体表示

【76072】Re:日付表示について
発言  γ  - 14/9/15(月) 22:28 -

引用なし
パスワード
   > この式を
ということは一般機能を使ってということですか?
・ツリー全体表示

【76071】Re:日付表示について
発言  kanabun  - 14/9/15(月) 22:27 -

引用なし
パスワード
   ▼素人です さん:
>0416 を 01-Apr-16 と表示したいのです。
>0519 を 01-May-19 以下同じく
>1213   01-Dec-13
>1017   01-Oct-17
>0322   01-Mar-22

結果の出力先はどこですか?
以下は 結果を配列vに代入し、イミディエイト・ウィンドウに出力しています。
A列の元テキストを B列に出力なら、
配列v の出力先をシートB列に変更ください。

Sub test()
 Dim v, d As Long
 Dim s As String
 Dim i As Long
 
 v = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value
 For i = 1 To UBound(v)
   s = v(i, 1)
   d = DateSerial(Val(Mid$(s, 3)), Val(Left$(s, 2)), 1)
   v(i, 1) = Format$(d, "dd-mmm-yy")
   Debug.Print s, v(i, 1)
 Next
 
End Sub
・ツリー全体表示

【76070】日付表示について
質問  素人です  - 14/9/15(月) 21:56 -

引用なし
パスワード
   0416 を 01-Apr-16 と表示したいのです。
0519 を 01-May-19 以下同じく
1213   01-Dec-13
1017   01-Oct-17
0322   01-Mar-22





すなわち 4桁表示(0416)で日付は必ず月の最初の日(つまり1日)を
表示させ最初の二桁(左から順に1桁目と2桁目つまり 04 )は月を英語表記で
残りの二桁(左から順に3桁目と4桁目つまり 16)は年を表します。
この式をどなた様かお教えください。

よろしくお願い致します。
・ツリー全体表示

【76069】Re:実行中ファイルの移動
発言  γ  - 14/9/15(月) 17:54 -

引用なし
パスワード
   開いているファイルを直接移動することはできないと思います。
1. 別フォルダをつけたパス名を指定してSaveAs し、
2. 元のパス名のファイルを、Killステートメントで削除
するという方針で臨んではどうでしょうか。
・ツリー全体表示

【76068】実行中ファイルの移動
質問  ほっと  - 14/9/15(月) 17:16 -

引用なし
パスワード
   いろいろ調べてみましたが、どうにもいかなくなってしまい、こちらに質問させていただきました。

会社で使うひな形ファイルに組み込みたいVBAがあります。
そのひな形ファイルにいろいろな情報を入力し、共有上のフォルダに名前を付けて保存をしています。

その保存したファイルを開き、再度手を加えて今度は別のフォルダに移動する、という作業をするのですが、この作業を簡素化したいのです。


あらかじめひな形ファイルにVBAを置いておき、実行するだけで共有上の別のフォルダに移動(現在置いてある場所にはファイルはない状態)ができれば最高に良いです。
2か所に移動する場合があるため、ボタン2個配置して、そのボタンを押せばそのフォルダに移動する、という具合にしたいです。


今開いているファイルを共有の別フォルダに移動し、現在あるフォルダから消す、という作業のVBAはどのように記述したらよいでしょうか。ファイル名を指定する移動方法はできたのですが、いろいろなファイル名になっている為「今開いているこのファイル」の移動方法がわかりません。

お教えいただけますでしょうか。
・ツリー全体表示

【76067】Re:CSVファイルの中身をエクセルに落とし...
発言  γ  - 14/9/12(金) 23:00 -

引用なし
パスワード
   # かなり蛇足です。

Refreshメソッドは実行されているのですか?
いずれにしても、テキストファイルの読み込み部分は
マクロ記録をもとにしてコードを書くと間違いがないでしょう。

ステップ実行して、動作確認することをお勧めします。
ステップ実行の仕方は、
ht tp://hp.vector.co.jp/authors/VA016119/step/step01.html
を参照。ht とtp の間のスペースを取って下さい。

なお、
(1)変数は必ず宣言して使いましょう。
ツール - オプションで、
変数の宣言を強制する にチェックしておくと、
今後新たに作るモジュールには、自動的に Option Explicitが
挿入されるはずです。
(2)
Rangeの操作にあたって、シート指定があるもの、無いもの、ActiveSheetの使用
などが混在しています。統一したほうがよいでしょう。
・ツリー全体表示

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