1 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 23:43:54.18 ID:ngrqyTy20.net] !extend:checked:vvvvv:1000:512 ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part63 https://mevius.5ch.net/test/read.cgi/tech/1568630099/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2 名前:デフォルトの名無しさん [2019/12/03(火) 00:17:07.29 ID:C8UnG3E4M.net] >>1 MSgbox "乙"
3 名前:デフォルトの名無しさん (ワッチョイ 8101-MhVQ) mailto:sage [2019/12/03(火) 06:50:45 ID:EPisquqd0.net] 北海道のグラサンのハゲはここにこないのー?
4 名前:デフォルトの名無しさん [2019/12/03(火) 07:23:30.55 ID:0rVoayhJp.net] 前レスナンバー999 なんとなくわかるけど a = msgbox 文字列 これならmsgboxが戻り値とわかるが cells.border() これはborderの戻り値が〜じゃなくてcellsの戻り値がボーダーに入ってんじゃないの? 関係図を教えて
5 名前:デフォルトの名無しさん (ワッチョイ f602-FWG3) mailto:sage [2019/12/03(火) 09:16:21 ID:9IKqMgsD0.net] >>4 じゃないの a = cells() a.border() って事なの
6 名前:デフォルトの名無しさん (ワッチョイ f191-iiDQ) mailto:sage [2019/12/03(火) 10:50:38 ID:eFWYyMY/0.net] セルのボーダーのラインスタイルの戻り値にxlInsideHorizontalを入れようとしている。
7 名前:デフォルトの名無しさん (ワッチョイ 92b1-W09L) mailto:sage [2019/12/03(火) 16:53:00 ID:HVSFa5J10.net] >>4 Cells(i, j).Borders(xlDiagonalDown).LineStyle = xlInsideHorizontal ↑色々省略されている。 ↓なるべく略さずに書き直してみる。 Let Excel.Application.ActiveSheet.Cells(i, j).Borders(xlDiagonalDown).LineStyle = xlInsideHorizontal 先頭の「Let」はステートメント(命令)で、「この行のコードの右辺の値を左辺に 代入してね」という命令になっている。 また、このコード例の場合、ピリオドの右に続く単語はすべて(たまたま)「プロパ ティ」になっている。 だが、「ApplicationプロパティのActiveSheetプロパティ」だとか「Cellsプロパ ティのBordersプロパティ」だとかいう語は成り立たない。 ExcelオブジェクトライブラリのApplicationプロパティにより、Applicationクラス のインスタンス(Applicationオブジェクト)を参照(Get) →ApplicationオブジェクトのActiveSheetプロパティにより、Worksheetクラスのイ ンスタンス(WorkSheetオブジェクト)を参照(Get) →WorkSheetオブジェクトのCellsプロパティにより、Rangeクラスのインスタンス (Rangeオブジェクト)を参照(Get) (Rangeオブジェクトのデフォルトプロパティの引数にi・jを指定し、Rangeクラ スの別のインスタンス=Rangeオブジェクトを参照) →RangeオブジェクトのBordersプロパティにより、Bordersクラスのインスタン ス(Bordersオブジェクト)を参照(Get) (Bordersオブジェクトのデフォルトプロパティの引数にxlDiagonalDownを指 定し、Borderクラスのインスタンス=Borderオブジェクトを参照) →BorderオブジェクトのLineStyleプロパティにxlInsideHorizontalを代入 (Let)してね(=LineStyleプロパティプロシージャの引数にxlInsideHorizontalを指 定して、LineStyleプロパティプロシージャを実行してね)。
8 名前:デフォルトの名無しさん (ワッチョイ f191-iiDQ) mailto:sage [2019/12/03(火) 16:57:39 ID:eFWYyMY/0.net] >>7 多分、初心者は何言ってるかサッパリ分からんだろうなw
9 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 18:21:24.00 ID:0X+RZN9Ra.net] >>8 そう・・・ >>4 「Cells.Borders」は 1.アクティブなWorksheetオブジェクトのCellsプロパティを参照(Get) →戻り値はRangeオブジェクト 2.RangeオブジェクトのBorders(Borderではない)プロパティを参照(Get) →戻り値はBordersオブジェクト という表現。 Borders()の括弧の中にxlBordersIndex定数を指定した場合、 戻り値はBorderオブジェクトになる。 「いきなりプロパティからはじまるのはおかしい」と思うかもしれないが、それは>>7 に書いたとおり色々と省略しているから。
10 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 18:47:20.18 ID:0X+RZN9Ra.net] >>7 って、なんかめちゃくちゃ改行入っとる・・・ 書き直し。 Let Excel.Application.ActiveSheet.Cells(i, j).Borders(xlDiagonalDown).LineStyle = xlInsideHorizontal ExcelオブジェクトライブラリのApplicationプロパティにより、Applicationクラスのインスタンス(Applicationオブジェクト)を参照(Get) →ApplicationオブジェクトのActiveSheetプロパティにより、Worksheetクラスのインスタンス(Worksheetオブジェクト)を参照(Get) →WorksheetオブジェクトのCellsプロパティにより、Rangeクラスのインスタンス(Rangeオブジェクト)を参照(Get) (Rangeオブジェクトのデフォルトプロパティの引数にi・jを指定し、Rangeクラスの別のインスタンス=Rangeオブジェクトを参照) →RangeオブジェクトのBordersプロパティにより、Bordersクラスのインスタンス(Bordersオブジェクト)を参照(Get) (Bordersオブジェクトのデフォルトプロパティの引数にxlDiagonalDownを指定し、Borderクラスのインスタンス=Borderオブジェクトを参照) →BorderオブジェクトのLineStyleプロパティにxlInsideHorizontalを代入(Let)してね(=LineStyleプロパティプロシージャの引数にxlInsideHorizontalを指定して、LineStyleプロパティプロシージャを実行してね)。
11 名前:デフォルトの名無しさん [2019/12/03(火) 19:15:56.54 ID:0rVoayhJp.net] >>10 インスタンスねぇ… プログラム1ヶ月の人にわかると思う?荒らしか?
12 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 20:14:07.74 ID:GoxUwlnv0.net] メソッドの引数は普通だけど、プロパティの引数って特別な呼び方ある? よく考えたら他の言語にプロパティの引数って見たことないような
13 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 21:25:51.83 ID:qY14OTyg0.net] >>11 それがわからんと理解できないよ そもそも一般には聞き慣れないと言うだけでそんなに難しい概念じゃないし
14 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 22:00:54.56 ID:Af3RUiJcx.net] >>12 インデクサの一種だろ
15 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 23:06:13.37 ID:h3dlk8FC0.net] インスタンス? VB.Netとかだと最初の1日目か2日目に学習することだとか言ったらまた荒れるんだろうなぁ
16 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 23:11:52.57 ID:Af3RUiJcx.net] インスタンスとクラスが分からないとお話にならんわな 式で参照取得しているものが何なのかまるで分かってないってことだから
17 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 00:04:05.95 ID:teYzVY+x0.net] 上級者でもわかってないと思うけどな。 シートモジュールに書くと、エラー出た時に、どこで止まったか分からないから、 標準モジュール書け!とかさwww
18 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 07:44:27.63 ID:95sMFvbJ0.net] そんな話じゃね―だろ。 Cells(1, 1)はA1セルを返す。 Cells(1, 1).Borders(xlDiagonalDown)はA1セルの右下がり斜め線の罫線を返す。 Cells(1, 1).Borders(xlDiagonalDown).LineStyleはA1セルの右下がり斜め線の罫線の線スタイルを返す。 Cells(1, 1).Borders(xlDiagonalDown).LineStyle = xlContinuousはA1セルの右下がり斜め線の罫線の線スタイルに直線を代入(設定)している。 初心者はこの程度の理解でOK。
19 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 07:45:37.52 ID:95sMFvbJ0.net] >>17 それは上級者ではない。
20 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 07:49:29.48 ID:k4fgFX/Ba.net] >>17 自分で作ってないだろ
21 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 12:58:07.59 ID:pTwF3wZxd.net] クリップボードの文字を操作するのはdataobjectで可能らしいですが、 スクショ撮った後に任意の座標の画素値を自動で取得するのは不可能なのでしょうか? また、やるとするとシートに画像貼り付け→画像をbmp保存→その画像をバイナリで読み込みという流れになってしまうのでしょうか?
22 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:01:40.27 ID:T2HYa+hHx.net] >>18 返す 直線を代入 このあたりの表現の曖昧さでひっかかるかどうかが初心者に留まる人と上級者になれる人の違いってことだわな
23 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 14:05:40.23 ID:95sMFvbJ0.net] >>21 スクショ取った後じゃないとダメなの? 別にスクショ取らなくても取得できるんだが。 勿論スクショ取った後に、そのスクショの任意座標の画素値も取得できる。
24 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 14:06:26.73 ID:95sMFvbJ0.net] >>21 シートに画像貼り付けとか必要無い。
25 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 18:01:03.06 ID:pTwF3wZxd.net] >>23 やりたいこととしては、囲碁やオセロなどのゲーム中に、盤面をリアルタイムにスクショ等をして、そこから各座標の色を読み込むことで盤面をデータ化するという流れなのですが、画像保存の手間を省けるのであれば教えて頂きたいです。 dataobjectだとgettextでテキストのクリップボードは読み込めるのですが、スクショだとできませんでした、、
26 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 20:05:12.18 ID:RAKlTKsZ0.net] >>25 いちいちクリップボードにスクショを入れなくても、ゲーム画面のデバイスコンテキストがわかれば、自由にピクセルの色を調べたり、逆にピクセルを書き込んだりできる excel.syogyoumujou.com/memorandum/get_dc.html
27 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 20:36:16.46 ID:M9X3+qe90.net] >>26 デバイスコンテキストなるものがあるのですか、、知らない概念でした、、 スクショ取るのは余計なステップだったのですね。素人にはこの発想しかなかったです 難しそうでまだざっとみただけですが、画面の画像認識系の自動化はこのやり方が基本なのですかね。 ゆっくり読んでやってみます!ありがとうございます
28 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 20:46:11.63 ID:M9X3+qe90.net] ちなみにスクショでも可能とありましたが、その際はdataobjectではなく同様にwin32apiの何かを使うことになるのでしょうか
29 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 21:17:45.91 ID:le08Bijgx.net] gdiplus.dllを使う感じかな
30 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 21:46:06.48 ID:z+3QCMVld.net] >>27 >>26 のリンク先に殆ど書いてある。 指定座標のピクセル値を取得するなら他にGetPixelを使う。 ただ、こいつは遅い。 大量に取得するならgdiplus系のGetPixel使った方が速いけど、そこまでする必要は無いかと思う。 どっちにしてもこの辺が自在に扱えるなら間違いなく上級者だね。 >>29 >>26 のリンク先の内容で行くならgdiplusじゃない。
31 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 21:57:16.24 ID:M9X3+qe90.net] >>29 >>30 ある程度の範囲の取得になると方針が変わるのですね、、 とりあえずまずはリンク先のやり方を勉強してみることにしてみます。 ご丁寧にありがとうございます。
32 名前:デフォルトの名無しさん (アークセー Sxc1-8b9E) mailto:sage [2019/12/06(金) 08:56:17 ID:jTNEW24Lx.net] VBAスレの方でも質問させていただいたのですが、こちらのスレにも詳しい方がいらっしゃるようなので、質問させてください Exchange / Outtlook VBAの質問です 初歩的な質問で申し訳ありません 任意の名前を持つ配布リストや連絡先グループに属するExchangeユーザーのSMTPアドレスの一覧を取得するにはどうしたら良いのでしょうか 配布リストや連絡先グループをExchange ユーザーとして取得するところまでは出来ているのですが、そこから先がうまくいきません なお配布リスト、連絡先グループいずれも個人ユーザーのみが登録されている前提なので、再帰によるメンバー取得は不要な状況です
33 名前:デフォルトの名無しさん (ドコグロ MM43-cb5P) mailto:sage [2019/12/06(金) 12:30:08 ID:G0zfLpZEM.net] >>32 > 配布リストや連絡先グループをExchange ユーザーとして取得するところまでは出来ているのですが、そこから先がうまくいきません その部分のコード貼れよ
34 名前:デフォルトの名無しさん (ワッチョイ 7501-cb5P) mailto:sage [2019/12/06(金) 18:27:30 ID:c6fF/5cl0.net] yokokara
35 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 20:54:35.91 ID:Nvs1NFCt0.net] >>32 先に質問した方でちゃんと断ったん?
36 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 21:19:32.34 ID:CNjj6fiz0.net] outlookを使わなければならないような身の上には同情する さすがに人少なそうだしいいんじゃないかな 俺はoutlook自体持ってないから良くわからないや。あれまだあるのか
37 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 21:25:37.04 ID:I1is1QTTM.net] 今のOutlookは使いやすくなってるよ 俺の中のOutlookは2000で止まってたから久々に使うことになってびっくりした もはや別物
38 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 21:33:39.56 ID:CNjj6fiz0.net] そうなのか? 大変そうだしoutlook入ってるし使ってみるか、と思ったらメールアドレスが必要なので諦めた 頑張って!
39 名前:デフォルトの名無しさん mailto:sage [2019/12/06(金) 22:46:30.30 ID:Nvs1NFCt0.net] 2013時点ではまだ使いにくい…
40 名前:デフォルトの名無しさん (オッペケ Src1-paXL) [2019/12/08(日) 04:18:02 ID:b513l43Er.net] 正直メール関係でマクロは怖いな ローカルでサーバ建ててテストするならともかくExchangeでいきなり本番環境でしょ?
41 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 09:25:05.41 ID:om5egmGHx.net] アカウント情報やOutlookアイテムの読み取り、アイテムダウンロードだけならExchange環境でのマクロ使用を恐れる理由はないかと思う
42 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 16:03:51.58 ID:Bl/pyruh0.net] すみません、お力を貸して頂きたいです。超初心者です。 固定長形式テキストデータを読み込んでExcelに落としたいのですが、ファイルの名前がその時によって違うので、下記のようにファイル名固定ではなく、 ”C:\test\"をオープンさせてその中から選択したテキストデータを読み込むようにしたいです。 試行錯誤しているのですが、作成完了まで時間がなく基礎的な知識も足りず、、 そのように書き換えて頂けないでしょうか;; Sub READ_test() Const cnsFILENAME = "\test1.txt" Dim FSO As New FileSystemObject ' FileSystemObject Dim TS As TextStream ' TextStream Dim GYO As Long ' 収容するセルの行 Dim strREC As String ' レコードを収容する変数 ' 指定ファイルをOPEN(入力モード) Set TS = FSO.OpenTextFile(ThisWorkbook.Path & cnsFILENAME, ForReading, False) ' 2行目から開始 Rows("2:65536").ClearContents GYO = 2 Do Until TS.AtEndOfStream ' レコードの読み込み(改行発見までの可変長⇒Ascii変換) strREC = StrConv(TS.ReadLine, vbFromUnicode) ' 1レコード分のセルへのセット Call GP_EDIT_FixLngRec(strREC, GYO) ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE TS.Close Set TS = Nothing Set FSO = Nothing End Sub
43 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 16:05:10.30 ID:Bl/pyruh0.net] 続き Private Sub GP_EDIT_FixLngRec(strREC As String, GYO As Long) Cells(GYO, 1).Value = FP_GET_REC_To_String(strREC, 1, 5) Cells(GYO, 2).Value = FP_GET_REC_To_String(strREC, 6, 5) End Sub Private Function FP_GET_REC_To_String(strREC As String, _ lngStrPos As Long, _ lngLngs As Long) As String Dim strREC2 As String strREC2 = Trim(StrConv(MidB(strREC, lngStrPos, lngLngs), vbUnicode)) FP_GET_REC_To_String = strREC2 End Function Private Function FP_GET_REC_To_Numeric(strREC As String, _ lngStrPos As Long, _ lngLngs As Long) As Currency Dim strREC2 As String strREC2 = StrConv(MidB(strREC, lngStrPos, lngLngs), vbUnicode) FP_GET_REC_To_Numeric = CCur(strREC2) End Function
44 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 16:14:11.41 ID:/kMCly/xM.net] 目がチカチカするから大文字変数関数やめろ COBOLかよ
45 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 16:57:19.39 ID:om5egmGHx.net] ' 指定ファイルをOPEN(入力モード) Dim cDir As String Dim srcName As String srcName = "C:\test" With Application.FileDialog(msoFileDialogFilePicker) .InitialFileName = srcName .Show If .SelectedItems.Count = 0 Then Exit Sub srcName = .SelectedItems(1) End With Set TS = FSO.OpenTextFile(srcName, ForReading, False) ' 2行目から開始 ファイル名指定の箇所だけ一部書き換えてみたので試してみて ちなみにこの手のcsv読み込み作業は一からvbaでスクラッチするよりも今やQueryTable使った方が早いと思うので、暇があったら調べるといいよ
46 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 17:19:26.73 ID:Bl/pyruh0.net] >>45 できました…!! 本当に助かりました、ご親切にありがとうございます!!;; 時間が出来たらQueryTableも調べてみます!
47 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 17:46:46.44 ID:om5egmGHx.net] >>46 動いてよかった 急いで書いたからDim cDirの行とか要らない行が入ってたわ、ごめんね テキスト読み込みなのにCSVどうこうとか言っちゃってるし 適当にコード直してつかってね
48 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 18:05:03.89 ID:Bl/pyruh0.net] >>47 了解です。 頂いたコードは今後勉強する時にも参考にさせていただきます…! 本当にありがとうございました!
49 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 20:46:43.66 ID:m4NCsCKi0.net] 教えて下さい。 役所のWeb公開している、DL済みxlsxファイルの「前回更新日時」を取得して 自book特定セルに落とそうと、 Webを漁って以下のVBAを書いてみた。 ※ なんでわざわざプロパティの「前回更新日時」を取得するのかというと ただの「更新日時」では、自分がDLした日時になってしまうから。 Public Sub getFileLastSaveTimeButton() With CreateObject("Excel.Application") .Visible = False With .Workbooks.Open(Cells(8, 1).Value) Cells(8, 2).Value = .BuiltinDocumentProperties("Last save time").Value End With .Quit End With End Sub Cell(8,1).Value の(8, 1)=A8セルに 目的のファイルのフルパスを入力済みなんだけど、 ここを定義された名前に置き換えたい。 Worksheetで普通に A8 = R_TargetFullPath と名前を定義して VBA上で With .Workbooks.Open(R_TargetFullPath) としたら 実行時エラー '1004': 申し訳ございません。が見つかりません。 名前が変更されたか、移動や削除が行われた可能性があります。 と出てしまうのは、なんでだろ? Public Subだから?
50 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 21:02:19.63 ID:m4NCsCKi0.net] 教えて下さい。 役所のWeb公開している、DL済みxlsxファイルの「前回更新日時」を取得して 自book特定セルに落とそうと、Webを漁って以下のVBAを書いてみた。 ※ なんでわざわざプロパティの「前回更新日時」を取得するのかというと ただの「更新日時」では、自分がDLした日時になってしまうから。 Public Sub LastSaveTime() With CreateObject("Excel.Application") .Visible = False With .Workbooks.Open(Cells(8, 1).Value) Cells(8, 2).Value = .BuiltinDocumentProperties("Last save time").Value End With .Quit End With End Sub これ自体は上手くいくんだけど、 目的のファイルのフルパスが入力済みの、 Cell(8,1).Value の(8, 1)=A8セルを 定義された名前に置き換えたい。 Worksheet上で普通に $A$8 = R_TargetFullPath と名前を定義して VBA上で With .Workbooks.Open(R_TargetFullPath) としたら 実行時エラー '1004': 申し訳ございません。が見つかりません。 名前が変更されたか、移動や削除が行われた可能性があります。 と中途半端なエラーが出てしまうのは、なんでだろ? Public Subだから?
51 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 21:04:30.92 ID:m4NCsCKi0.net] ごめん。 専ブラ不調で >>49 ,50と、 二重投稿になってしまった。
52 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 21:11:35.36 ID:uIaXKQtl0.net] >>50 Range(名前).Value
53 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 21:38:38.38 ID:m4NCsCKi0.net] >>52 ありがとう。やってみた。 ・・・ 実行時エラー '1004': 'Range' メソッドは失敗しました: '_Global' オブジェクト だって。
54 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 22:06:19.10 ID:ick2zDgR0.net] yokokara
55 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 22:10:45.88 ID:qsJQUXNgx.net] >>53 違うブックや違うシートがアクティブになっているとかで、名前付きセルが見つけられなくてエラーが返ってきてるんじゃないの ブック名を指定して式を書き起こせば問題なく動くと思うが
56 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 22:49:12.52 ID:uIaXKQtl0.net] >>53 Rangeにブックやシートの指定してる?
57 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 23:01:44.63 ID:gCiRV9kE0.net] MsgBox R_TargetFullPath で何が表示されるか見てみたら?
58 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 23:04:27.84 ID:m4NCsCKi0.net] >>55 ありがとう。 フォルダパスも名前を定義しているんだけど、 まずはその定義名を使わず、以下でやってみた。 With .Workbooks.Open(R_TargetFullPath) ↓ With .Workbooks.Open(Range("E:\Excel研究\前回保存日時の取得\○○の場合\'Last save timeを得るVBA.xlsm'!R_TargetFilePath").Value) コンパイルは通った。 で、立ち上げているのは自bookだけなのを確認して マクロを実行した結果、 実行時エラー '1004': 'Range' メソッドは失敗しました: '_Global' オブジェクト むぅ・・・
59 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 23:18:37.85 ID:m4NCsCKi0.net] >>56 ありがとう。 >>55 はシート名を飛ばしているけど、 定義名があるシート名も入れ込もうとしたら どう書いたら良いのだろう? 「ファイル選択」がシート名なんだけど、 ・・・\'Last save timeを得るVBA.xlsm'!ファイル選択!R_TargetFilePath でも、 ・・・\['Last save timeを得るVBA.xlsm']!ファイル選択!R_TargetFilePath でも、結果は 実行時エラー '1004': 'Range' メソッドは失敗しました: '_Global' オブジェクト だった。
60 名前:デフォルトの名無しさん [2019/12/08(日) 23:23:11.19 ID:zBnJIcph0.net] >>59 死ね
61 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 23:31:46.83 ID:m4NCsCKi0.net] >>57 ありがとう。 目的のファイル指定は取りあえず置いといて 画面抑止のままのこの主旨でいいのかな? Public Sub LastSaveTime2() With CreateObject("Excel.Application") .Visible = False MsgBox R_TargetFullPath End With End Sub で、MSGの結果は、中身がブランク。
62 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 23:32:04.18 ID:m4NCsCKi0.net] >>60 どうぞお幸せに。
63 名前:デフォルトの名無しさん mailto:sage [2019/12/08(日) 23:35:44.03 ID:uIaXKQtl0.net] >>59 普通にシート指定すればよい はっきり理解できてないのにブックもシートも指定せずセルを扱うなんて危険なことはやめた方がいい ところでR_TargetFullPathはセル名と言ってなかったかな? >Workbooks.Open(R_TargetFullPath) これが通るってR_TargetFullPathの中にフルパスが入ってるとしか思えない
64 名前:デフォルトの名無しさん (ワッチョイ 4bda-Fgt1) mailto:sage [2019/12/08(日) 23:50:05 ID:m4NCsCKi0.net] >>63 > 普通にシート指定すればよい その「普通」がよく分からなくて。 >>59 で試行したように、 sheet上での関数に他のbookから参照させるのとは 勝手が違うようだ。 > ところでR_TargetFullPathはセル名と言ってなかったかな? は、>>50 で書いたとおり、 Worksheet上で普通に $A$8 = R_TargetFullPath と名前を定義して としただけ。
65 名前:デフォルトの名無しさん (ワッチョイ 4d7c-TCJi) mailto:sage [2019/12/09(月) 00:26:53 ID:JYKNIWO60.net] >>64 シート指定とか調べず勘でやってるのか? 基本が無いのに勘で文法は書けないよ、知らないならちゃんと調べた方がいい 名前を定義とは、$A$8セルに「R_TargetFullPath」という名前を付けたと言ってる? ちなみにVBAでR_TargetFullPathという名前の変数か定数作ったりしてない?
66 名前:デフォルトの名無しさん (ワッチョイ 2359-VnuC) mailto:sage [2019/12/09(月) 00:28:16 ID:s6MuVJyT0.net] R_TargetFullPathに何を入れたいのかもう一度よく考えてコードを見直せ
67 名前:50 mailto:sage [2019/12/09(月) 18:07:53.39 ID:Z8IKnDOY0.net] いろいろ考えてくれた皆さん、どうもありがとう。 自分の考えを上手く伝えられず、申し訳ない。 自分なりの考えで、確証は得られていないけど、 ・"BuiltinDocumentProperties" を使った「前回更新日時」の取得は、対象ファイルをいちいち開かないと取得出来ないため、Public Subでやるしかない。 ・が、Range(定義名)では、例えアクティブな自sheet内の定義名でもなぜか上手く取得出来ない。 ・ただし、アクティブなセルをCells(行数, 列数)なら値取得が出来る。 ということかと。 ならば、「1つのファイルの日時を取得するのに定義名を使う」考え方を変えて、 ・Cells(行数, 列数)を活かして、フォルダにDLした .xl* ファイルの、全ての前回更新日時を取得する。 としたら、出来た。 3つめの "Public Sub LastSaveTime3()" をボタンにマクロ登録 https://i.imgur.com/19QWsrZ.png Power Queryで取得したフォルダ内.xl*ファイル一覧表(タイトルが黄緑色の列)の右列に 上記VBAで「前回更新日時」を取得した結果(タイトルが深緑色の列) https://i.imgur.com/jegG0b5.png
68 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 19:47:30.76 ID:FU5EvZBv0.net] ここには北海道のグラサンスーパーハゲザーこないのー?
69 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 20:06:58.60 ID:JYKNIWO60.net] >>67 ブックとシートを指定せずにセルを指定してるから取得できないと何度… 指定してないからアクティブなシートを拾いに行く アクティブなシートに名前の定義がなければ当然名前の定義を取得できるわけがない
70 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 20:26:18.92 ID:e1eF5taTx.net] >>67 Public Subによる制御フローじゃないとドキュメントプロパティを参照できないなんていう制約は存在しないと思う
71 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 20:35:27.90 ID:Z8IKnDOY0.net] >>70 ただのSubに変えたら、ダメだった。
72 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 20:37:14.17 ID:Z8IKnDOY0.net] >>69 仰いますけど、 参照しようとした定義名は、自bookのアクティブsheet内だす。
73 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 20:45:36.21 ID:Z8IKnDOY0.net] >>71 参考にしたのはMSコミュニティのこれ↓ https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_excel-mso_other-mso_2010/%E5%89%8D%E5%9B%9E%E4%BF%9D%E5%AD%98%E6%97%A5/97f992ad-416d-e011-8dfc-68b599b31bf5?messageId=33ce5330-cb6f-e011-8dfc-68b599b31bf5&auth=1
74 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 21:50:46.52 ID:TvnOkFVF0.net] Range("R_TargetFullPath").Value
75 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 22:19:06.53 ID:JYKNIWO60.net] >>72 そのシートがアクティブになっていれば取得できる なってなければ取得できない 取得できないということはアクティブだと思い込んでるだけか、名前が間違ってるか、指定が間違ってるか
76 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 22:21:49.68 ID:ZJISTsUc0.net] >>72 シートは一つ?別のシートにも同名範囲があって特定できないとか?
77 名前:デフォルトの名無しさん mailto:sage [2019/12/09(月) 22:23:12.83 ID:JYKNIWO60.net] >>74 それだと1004エラーが出たらしい
78 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 00:08:00.24 ID:IGUOZi3/x.net] >>73 これはサブルーチン呼び出しの都合でPublicスコープにしているだけで、BuildinDocumentPropertiesの仕様とは関係ないのでは
79 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 00:18:53.99 ID:IGUOZi3/x.net] 名前付き範囲のスコープの問題もありそう
80 名前:デフォルトの名無しさん (ワッチョイ 4be8-V35x) mailto:sage [2019/12/10(火) 06:11:01 ID:1SW8Wt4N0.net] >>77 その時は Range(R_TargetFullPath).Value としたんじゃないか?>>52-53
81 名前:デフォルトの名無しさん (ワッチョイ 037d-V35x) mailto:sage [2019/12/10(火) 11:53:22 ID:Snrdoe410.net] ページに設定しているフィルターの解除をする場合 Range("E5").Select Selection.AutoFilter といった具合にRangeとセットで使うしか無いのでしょうか? ここでは、VBAで「E5」を指定していますが、中のデータが入力により空になる事もある為 Range指定する事なくフィルタを解除したいです。
82 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 20:17:21.65 ID:78OD2uofx.net] >>81 ページって何?シートのこと? それとも印刷範囲のこと?
83 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 21:36:21.94 ID:ntdCbZOy0.net] シート1のJ1〜J220のセルをシート2に行で張り付けて それをどんどん繰り返して1〜48400の列を220*220の表にしたいんだけど、forに対するnextが無いと怒られます 3つのforに対してnextが足りてないのはわかるのですが、適当な場所においてもエラーが出ます どうしたら解決するでしょうか? Sub TEST4() Dim S1 As Worksheet, S2 As Worksheet Dim i As Integer, y As Integer, z As Integer For i = 1 To 220 For y = 1 To 48181 Step +220 For z = 220 To 48400 Step +220 Set S1 = Worksheets("Sheet1") Set S2 = Worksheets("Sheet2") S2.Range("A" & i & ":" & "HL" & i).Value = S1.Range("J" & y & ":" & "J" & z).Value Next End Sub
84 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 21:54:10.27 ID:bwWsAejd0.net] >>83 Sub TEST4() Dim S1 As Worksheet, S2 As Worksheet Dim r1 As Long, r2 As Long Set S1 = Worksheets("Sheet1") Set S2 = Worksheets("Sheet2") r2 = 1 For r1 = 1 To 48400 Step 220 S2.Range("A" & r2 & ":HL" & r2) = WorksheetFunction.Transpose(S1.Range("J" & r1 & ":J" & r1 + 219)) r2 = r2 + 1 Next End Sub
85 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 21:58:10.86 ID:blXuValB0.net] >>83 間違った場所に置くからエラーが出るんでしょうな
86 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 22:05:06.97 ID:bwWsAejd0.net] Sub TEST4() Dim S1 As Worksheet, S2 As Worksheet Dim r1 As Long, r2 As Long Set S1 = Worksheets("Sheet1") Set S2 = Worksheets("Sheet2") r2 = 1 For r1 = 1 To 48400 Step 220 S2.Range("A" & r2).Resize(, 220) = WorksheetFunction.Transpose(S1.Range("J" & r1).Resize(220)) r2 = r2 + 1 Next End Sub
87 名前:デフォルトの名無しさん [2019/12/10(火) 22:33:04.15 ID:e5kRWpUlM.net] >>83 シート1には既に220*220の表があって、それをシート2に縦横入れ換えて貼り付けたいってこと?
88 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 22:41:16.48 ID:+pH53X+X0.net] 現在表示しているワークブックからファイル名の一部を取り出して、その数字をMsgBoxで表示するなど他の計算で使うことってできないでしょうか? 例えば「01-5.xlsx」の場合「-5」、「02+5.xlsx」の場合「5」、「03+1000.xlsx」の場合「1000」、「04-1234.xlsx」の場合「-1234」のような形 左の数字は2桁、右の数字は1〜4桁でファイルによって違います 0や小数点以下の数字はありません ファイル名がプラスの場合とマイナスの場合があります 正数の場合ファイル名は+表記ですが記号自体は必要ありません 「マクロを実行しているワークブック」ではなく「現在表示しているワークブック」のファイル名を参照したいです プログラミングの経験が全くなくて先週からマクロを触り始めたので不可能なことを質問かもしれませんがよろしくお願いします
89 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 22:46:23.21 ID:ntdCbZOy0.net] >>84 、866 スゲーできたーありがとうございます。中身よく見て、勉強します。 >>87 シート1に1列で48400ほどデータがあるんで、それを別シートに220*220の表にしたかったんです。
90 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 23:00:44.84 ID:78OD2uofx.net] >>88 + または - を区切り文字としてThisworkbook.NameをSplit関数で分割して配列化する 得られた配列の二つ目の要素を取り出して整数型に型変換する この二つのステップを実現すれば良い
91 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 23:02:34.06 ID:78OD2uofx.net] >>88 よく要件を読んだらThisworkbook.Nameより ActiveWorkbook.Nameの方が良いかも
92 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 23:04:16.14 ID:blXuValB0.net] >>90 -が消える上に.拡張子まで全部取得する羽目になる
93 名前:デフォルトの名無しさん mailto:sage [2019/12/10(火) 23:06:54.98 ID:blXuValB0.net] ファイル名を.で区切った1個目の3文字目以降を取得して数値変換すればいい
94 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 01:12:21.51 ID:HRfJYRvp0.net] >>82 シートです!
95 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 05:06:25.08 ID:rrddvJwO0.net] >>81 Worksheets("シート1").Autofiltermode = false
96 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 09:15:52.19 ID:0sWj3Hq10.net] >>83 For NextではNextの後を省略すべきじゃない。 For Eachならまだ分かるが。
97 名前:デフォルトの名無しさん (ワッチョイ 037d-V35x) mailto:sage [2019/12/11(水) 11:27:42 ID:HRfJYRvp0.net] >>95 サンキュー!!
98 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 19:02:34.08 ID:3wTkanlw0.net] それ多分フィルタ掛かってないとコケる。 On Error〜か、If AutoFilterMode Then入れないと。
99 名前:デフォルトの名無しさん mailto:sage [2019/12/11(水) 23:16:02.27 ID:0sWj3Hq10.net] >>98 Falseにする分には問題無い。
100 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 20:44:42.97 ID:gjQRRqT20.net] >>88 Sub test2() '整数を格納 Dim lngFileName As Long '正規表現オブジェクトを作成 Dim objReg As Object, objRegMatch Set objReg = CreateObject("VBScript.RegExp") With objReg 'ファイル名のパターンを指定 '[半角数字2文字][区切り文字1文字][半角数字1〜4文字][拡張子(xlsxまたはxls)]に一致 .Pattern = "^\d{2}.(\d{1,4})\.(?:xlsx|xls)$" .Global = True End With '正規表現にマッチしないファイル名だった場合の処理 Set objRegMatch = objReg.Execute(ActiveWorkbook.Name) If objRegMatch.Count < 1 Then 'メッセージボックスを表示 MsgBox ("正規表現アンマッチ") 'Label1にジャンプして処理を終了 GoTo Label1 End If '正規表現のグループ化した部分を整数として格納 lngFileName = objReg.Replace(ActiveWorkbook.Name, "$1") 'メッセージボックスを表示 MsgBox (lngFileName) Label1: End Sub
101 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 21:07:09.62 ID:TAtdTKRF0.net] ここには北海道のグラサンスーパーハゲザーこないのー?
102 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 22:26:00.96 ID:NQXxI4iB0.net] ファイル名に + と - は使えないんじゃね
103 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 22:29:22.61 ID:NQXxI4iB0.net] あれ?使えるのか
104 名前:デフォルトの名無しさん mailto:sage [2019/12/12(木) 23:03:36.86 ID:pxF5Pr1U0.net] >>103 使えるけどコマンドプロンプトでトラブルが起きることがあるから推奨しないと主張する派閥もいる
105 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 08:53:38.24 ID:Kr+RdvKJM.net] 特定のディレクトリに複数のエクセルがあってそのエクセルの特定のシートに値を設定するってマクロを作ったところなんですが特定のシートがない場合は処理を抜けるようにするのってどうすればいいんでしょうか
106 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 09:22:06.72 ID:jxXQPWyn0.net] バイナリデータをエクセルに16列で読み込んで(ここまでは出来た)、 今度はそれの逆をしようとしているのですが最初で詰まっています とりあえず1列だけでもと、やってみたものの全然うまくいきません サンプルのOutputをBinaryに、Print をPut構文にすればできるような気がするのですが 出力ファイルにデータが反映されてなかったりといった状況です Sub make() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim datFile As Variant datFile = ActiveWorkbook.Path & "\data.bin" Open datFile For Output As #1 Dim i As Long i = 1 Do While ws.Cells(i, 1).Value <> "" Print #1, ws.Cells(i, 1).Value i = i + 1 Loop Close #1 End Sub
107 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 09:29:21.11 ID:tON2FCC6x.net] >>105 Dir関数かFileSystemObject. FileExistsで調べられる
108 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 09:33:50.19 ID:tON2FCC6x.net] >>105 ファイル存在確認じゃなくてシート存在確認かごめん
109 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 10:57:50.32 ID:Kr+RdvKJM.net] >>108 シートがない場合の件はForで回して無事解決できました
110 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 12:12:29.79 ID:Kr+RdvKJM.net] VBAで名前定義がされたセルに値を書き込む際名前定義の範囲がシート指定の場合操作できないのでしょうか
111 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 14:57:25.33 ID:tYi2uLeR0.net] >>106 出力するデータの型がバイナリになっていないとだめかも
112 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 18:47:12.50 ID:PdnkT2240.net] >>110 そんなことないはず。
113 名前:デフォルトの名無しさん mailto:sage [2019/12/13(金) 21:57:03.12 ID:mlyVYmAb0.net] 北海道のグラサンスーパーハゲザーはここにこないのー?
114 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 10:49:44.02 ID:q6pf2Uya0.net] PDFからのデータ取得ってどうにかならんもんかな。 Adobeの有料版使ってエクセル変換してるが、フォーマットによってはレイアウト崩れが酷くて使い物にならん。 ハイライトリストも試してみたんだけど、文字がぶつ切りでしか取れなくて、速度も遅い。 座標見ながら文字結合するのもアレだし。 RPA的にコピペするのもマヌケだしなぁ。
115 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 11:40:24.17 ID:0wkcBg3Ka.net] そんな馬鹿なことをしなくてもいいように業務フローを見直す、が正解
116 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 11:59:38.55 ID:qU+OtdBcd.net] >>114 理論上はPostscriptを完璧にシミュレートすれば可能なはずなんだけど、かなり面倒だしそこまでやってるアプリは今のところ見た事ない レイアウトが崩れない変換アプリがあるんなら教えて欲しいわ
117 名前:デフォルトの名無しさん mailto:sage [2019/12/14(土) 14:16:07.99 ID:O6whyyHQ0.net] PDFのレンダリングは完璧なんだから 取得ができないのは本来おかしいんだけどね
118 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 09:28:05.88 ID:P17lNwFm0.net] 環境は、OS:Windows10, Excel2016です。 初歩的な質問ですが、よろしくお願いします。 エクセル開発タブ⇒マクロの記録を選択 マクロの保存先を新しいブックにしてOKすると、 新しいブックが表示されてしまいます。(EXCEL2010までは表示はされなかった気がします。) 表示させないようにしたいですが方法はありますでしょうか?
119 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 12:10:44.95 ID:JDQV93QX0.net] Excelの使い方の質問ですな
120 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:30:33.36 ID:STgulX1kx.net] >>118 そもそもそんな質問をする理由が分からない マクロの保存先を作業中のブックに変えればいいだけの話では RPAとかの都合なのか?
121 名前:デフォルトの名無しさん (ワッチョイ eff1-ctch) [2019/12/15(日) 14:37:37 ID:Jtes46Zd0.net] VBAのコードを長時間書いていたら肛門が痛くなりました。 これは何かの病気?いい薬はありますか?
122 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 15:56:49.13 ID:ZgYfMqOYM.net] Worksheets(1), Worksheets(2), Worksheets(3), ... が常にワークシートの並び順になっている事を前提にコーディングしても大丈夫ですか?
123 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 16:04:03.19 ID:jQWuvGce0.net] 止めは先が100%大惨事になるだろうな
124 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 16:08:21.42 ID:STgulX1kx.net] >>122 OK シートの並び順とシートのIndexは連動しているから ただ他人と共有するブックでシートIndexに依存したコードを書くならば、シートの追加や削除や並び替えをユーザー側で行えなくするために、ブック構成の保護をかける必要はあるかも
125 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:43:05.99 ID:FsE4lMSlp.net] >>122 非表示がなければ
126 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:19:26.62 ID:SHKnrJYm0.net] インデックス値とシートの順にそんな保証あったかな 使い古しのワークブックだと最初のシートがSheet1とは限らない気がするし
127 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:53:45.41 ID:jQWuvGce0.net] sheet1じゃなくてsheet(1)だぞ 左端がsheet(1)
128 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 22:30:02.10 ID:STgulX1kx.net] >>126 CodeNameの話じゃなくてシートインデックスの話だぞ
129 名前:デフォルトの名無しさん [2019/12/15(日) 23:11:58.85 ID:HW9FgRDW0.net] VBAで拡張子がDWGのCAD図面ファイルから文字列と数字を抜き出してエクセルに貼り付けたいんだけどなんかイイ方法ない?
130 名前:デフォルトの名無しさん [2019/12/15(日) 23:42:09.44 ID:LATD77rz0.net] AutocadのVBA使えば。
131 名前:デフォルトの名無しさん [2019/12/15(日) 23:44:25.04 ID:4M9N/f7Ka.net] >>130 AutoCADのソフトは持ってないんだけど出来るの?
132 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 02:59:51.17 ID:81b5k4YR0.net] DXFファイルはないのか?
133 名前:デフォルトの名無しさん [2019/12/16(月) 08:14:35.94 ID:ylV0M4Pv0.net] >>132 ないんだ
134 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 08:19:35.03 ID:MkhWpp+30.net] >>129 VBAからほかのアプリをコントロールする方法があるから、適当なフリーウェアでDXFに変換 DXFはテキストファイルだから文字列がそのまま入ってる
135 名前:デフォルトの名無しさん [2019/12/16(月) 09:20:06.30 ID:ylV0M4Pv0.net] >>134 会社だからあんまりフリーソフト入れたくないんだよなぁ
136 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 12:08:57.72 ID:t2/k2gwa0.net] どこまで読み取りたいのか分からんが、タイトルとかコメントとか作者とかは読み取れるんじゃない? AutoCAD入ってなくても動くか分からんけどCOM用のAPI使って読み取るサンプルならAutodeskのフォーラムに有ったぞ。
137 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 18:36:30.35 ID:81b5k4YR0.net] >>135 業務上必要だと上司に相談して無理ならできませんでいいやん
138 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 19:13:38.22 ID:zd6rche20.net] DWGファイルを扱うってことはどっかの部署ではAutoCADが動いてるわけだから環境借りるなりすればいい
139 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 19:29:44.71 ID:A0F2PFYR0.net] 何がやりたいのか(最終目的が何なのか)分からないが、 AutoCADのスレで質問した方がいいと思う AutoCAD総合スレ part7 https://mevius.5ch.net/test/read.cgi/bsoft/1556080032/
140 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 20:17:26.44 ID:+vV5KnGFa.net] そんなデータの編集業務ってブラック企業じゃね
141 名前:デフォルトの名無しさん [2019/12/16(月) 20:25:39.43 ID:ylV0M4Pv0.net] 図面から読み取る仕事が多くてVBAで自動化できないかと考えてるだけだよ。ブラック企業でもないよ。 バイナリファイルじゃ読み取れないし、フリーソフトで一つ一つテキストファイルDXFに変換っていうのもなかなかナンセンスな気がする
142 名前:デフォルトの名無しさん [2019/12/16(月) 21:37:32.27 ID:CfM/IfFed.net] >>141 お前が馬鹿なだけだろ
143 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 21:44:36.78 ID:UUZzkS6j0.net] よかったな天才に教えて貰えるぞ
144 名前:デフォルトの名無しさん [2019/12/16(月) 21:59:33.00 ID:UZ2w46Iu0.net] >>141 だけど天才の>>142 に教えてほしい。どうしたらいい?
145 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 23:05:55.21 ID:ArNGhSEVa.net] その図面データに営利目的で使用してはいけないって書いてないか?
146 名前:デフォルトの名無しさん [2019/12/16(月) 23:19:30.71 ID:zUbFdDFya.net] 社内の人が作ってる図面なんだが
147 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 01:41:33.76 ID:fNjlS94d0.net] だったら保存形式かえてもらえばすむやん
148 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 02:29:00.49 ID:7tj6sNHj0.net] CADファイルならVISIOで開けるじゃね VISIOにVBA載ってなかったか
149 名前:デフォルトの名無しさん (ワッチョイ a201-VrMI) mailto:sage [2019/12/17(火) 02:51:35 ID:Ef4LKPDY0.net] DWGもCOM経由でExcelから扱える
150 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 08:50:39.06 ID:7E3y3B+ga.net] Excelで作成したものをフリーOfficeのCalcで開こうとするとエラーが出るので、違うPCのExcelにコードを写したいのですが、どうすれば良いでしょうか? sheetは5枚でそれぞれデータが入力されています。 そのシートをコピーしてマクロコードをコピペすればできるのでしょうか? コピーはできても貼り付ける場所が分かりません。教えてください。
151 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 09:41:37.65 ID:vQ+5LFSo0.net] マクロは互換性ほぼ無いからなあ
152 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 15:37:53.37 ID:/A3hSSic0.net] >>150 よく分からん。 ファイルをコピーしてそのファイルをそのまま使えば良いんじゃね? 要はさ、そのマクロのコ―ドがExcelの何を使っているかで変わるだろ。 コードを追って必要なものをコピーすれば使えるだろうよ。
153 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 20:23:29.92 ID:3Fa5Zu3xa.net] 慣れてる人ならできるかもしれんが 初心者じゃ無理だろ、互換性ないし
154 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 20:37:54.29 ID:WWM9H/Hw0.net] OOoのVBAは相当単純なものじゃないと動かなかったような 色々省略するのもダメだったような気がする
155 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 20:55:11.10 ID:BpmC86c/0.net] OOOBasicなんてあるんだな 勉強する人いるの?
156 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:06:28.96 ID:WWM9H/Hw0.net] OOOBasicというのか・・・ 数年前きまぐれにちょっと触って、あまりの互換性のなさに逃げ出したわ
157 名前:デフォルトの名無しさん (ワッチョイ 1b8e-RPlZ) [2019/12/17(火) 23:47:48 ID:eRzCNyCK0.net] >>150 馬鹿は死ね
158 名前:デフォルトの名無しさん [2019/12/18(水) 02:07:35.42 ID:ksLRDXXy0.net] なんでBasicにしたんだろね。 後発なんだから選べたはずなのに。
159 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 02:16:13.86 ID:mwLPhsOw0.net] Cに似せるほうが大変だろう
160 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 07:45:18.46 ID:enbCu13E0.net] >>158 VBが売れたから、機能はほぼそのままにVBAとしてofficeに搭載した VCの登場はもっと後 時系列的に仕方ないとは思う 俺もCの方が良いとは思う
161 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 07:46:31.18 ID:5n7ujQMK0.net] oooの話だろ
162 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 08:15:59.63 ID:Bw/0QRZma.net] >>152 PC1のデータをPC2に移したい。でも、PC2にUSBなど外部のものを差し込めないしネットには繋がるけど仮想?か分からないけどデータをPC2のデスクトップとかドキュメントに保存できないので、 データの中身をコピーしてPC2でExcelを開きペーストすれば良いのではと考えたのですが、 Excelのデータを丸々コピーするにはまずシートをコピペしてその後マクロコードをコピペすれば良いのでしょうか?どこに貼り付ければ良いのかわかりません。
163 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 14:12:35.99 ID:HS0oeyOA0.net] PC2のどこに移したいの? PC2でデータを開き データの中身をコピーして Excel(新規ブック)を開きペーストすれば良い でもその新規ブックは保存できないんでしょ?
164 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 14:53:42.73 ID:mwLPhsOw0.net] 会社のPCなら上司にまず先に相談しろ
165 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 15:30:08.92 ID:Bw/0QRZma.net] >>163 PC2のデスクトップ Excelを新規で開けば保存できる。 もしくは開きたいExcelのデータCalcでなら開ける。 Calcで開いてコピーしたものをExcelに貼り付けたら出来るのか?セル全範囲コピーして貼り付けてマクロコードもコピーして。
166 名前:デフォルトの名無しさん [2019/12/18(水) 16:28:12.29 ID:cW21FM1r0.net] >>162 馬鹿は死ね
167 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 18:12:16.35 ID:2hbVJNuaa.net] シートの書式がコピーできるかな?
168 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 18:12:36.66 ID:2hbVJNuaa.net] セルね
169 名前:デフォルトの名無しさん [2019/12/18(水) 18:28:12.80 ID:jQts0Cg90.net] >>167 死ね
170 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 20:40:24.52 ID:eYqAoNFQM.net] Officeクリップボードをクリアするにはどうしたらよいですか?
171 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 21:42:34.31 ID:enbCu13E0.net] >>161 ちゅまん
172 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 22:44:40.50 ID:ycaRvEPMx.net] >>171 かわいい
173 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 23:33:23.01 ID:kDyrT7eN0.net] >>170 その文言でぐぐれ
174 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 17:59:43.75 ID:OOaAV86L0.net] ちょっと教えて下さい 自動的に新しいcsvファイルが保存されてくるフォルダがあって 新しいファイルが保存されたら処理をするってコードを作りたいんですが どんな感じにしたらよいのかアイデアが浮かびません イメージは処理開始としてから処理停止とするまでずっと監視と処理をし続ける感じです 正攻法ってどんな感じでしょう?
175 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 18:07:29.48 ID:FlPgbXc+r.net] 定期的にフォルダの更新日時かファイル数を比較
176 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 19:15:47.42 ID:PZllcG7iF.net] C#に乗り換えてFileSystemWatcherかな そういうのはサービスにして常時起動したいだろ?どのみちVBAじゃ無理がある
177 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 20:13:02.64 ID:r3z4nZn+0.net] >>174 csvデータは一般機能のpower queryで「フォルダ指定」で取得してから、何らかの加工をする必要があればVBAでやるというのはどうでしょう?
178 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 20:52:54.37 ID:Uvgz+C1W0.net] >>174 Application.OnTimeでググればいろいろ出てくる Excel/VBA: 特定のフォルダ内のファイルの更新状況を監視するマクロ pineplanter.moo.jp/non-it-salaryman/2016/12/30/excel-vba-folder-monitor/
179 名前:174 [2019/12/19(木) 21:50:34.66 ID:OOaAV86L0.net] コメントありがとうございます。 C#は知識がなくて・・・。1か月後に必要なんですが今からいけるかな。。。 >>177 すこし理解に時間がかかっています。内容確認してみます。 >>178 参考例ありがとうございます。 更新したファイルだけ処理をしたいのですが、この例だと毎回全ファイルを読むみたいなので 例えば処理したファイル名はシートに記録しておいて 更新起動時に毎回処理したかしてないか判断するのも追加するって感じですかね。
180 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 22:24:23.56 ID:O8pz/cv40.net] >>179 悪用すると色々できそうだな
181 名前:デフォルトの名無しさん (ワッチョイ 9f2c-1ZZR) mailto:sage [2019/12/20(金) 10:20:51 ID:A+TGdcd90.net] ファイルのタイムスタンプで判断すれば?
182 名前:デフォルトの名無しさん (ワッチョイ 9f2c-1ZZR) mailto:sage [2019/12/20(金) 11:57:58 ID:A+TGdcd90.net] Ruby で、ファイルの最終更新時刻を取得する fs = File::Stat.new( "./a.txt" ) p fs.mtime #=> 2018-01-16 13:36:40 +0900 最終更新時刻 p current = Time.now #=> 2019-12-20 11:54:02 +0900 p current - fs.mtime, fs.mtime - current #=> 60733042.351125, -60733042.351125
183 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 15:07:41.92 ID:INeYifjy0.net] >>179 ファイルのアーカイヴ属性を変更すればいいよ。これなら新規以外にも、変更ファイルも拾えるはず。
184 名前:デフォルトの名無しさん [2019/12/20(金) 15:08:25.80 ID:CBAVBsMi0.net] 馬鹿ばっか
185 名前:デフォルトの名無しさん [2019/12/20(金) 15:24:50.75 ID:CkbICV7EM.net] ハゲばっか
186 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 20:34:34.24 ID:UWWbjOVR0.net] 馴鹿ばっか
187 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 11:10:49.09 ID:lLQbKr+9r.net] クリスマスだから
188 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 19:08:13.95 ID:reWWVMAr0.net] セルに指定したフォントの情報などを変数(オブジェクト?)として 保持して、別のセルに貼り付けることはできないでしょうか Public Sub textMacro() ActiveSheet.Cells(1, 1).Select ActiveCell.Value = "testTESTtest" ActiveCell.Characters(Start:=5, Length:=4).Font.ColorIndex = 3 End Sub こんな感じで、文字列の途中で色を変えたりフォントを変えたり した情報を構造体配列として保持しておいて、ソートしたり 特定条件で抽出したりしたデータを、書式ごと別のセルに 貼り付けたいのです 上記のようなコードで一旦別のワークシートに書き込んでやって、 そこを参照してコピーすれば解決します ですが作業用ワークシートを作るのが美しくないので、なにか 方法がないものかと悩んでいます
189 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 19:30:42.69 ID:EDn7hR2k0.net] >>188 rangeにでも入れとけばいいんじゃないの
190 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 19:57:20.88 ID:reWWVMAr0.net] >>189 言葉足らずだったかもしれません 188で書いたコードのように、一旦どこかのセルに書式を設定するのではなく、 書式設定済みのデータを内部で生成したあとでセルに貼りたいのです
191 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 20:19:43.43 ID:Z2fXXpuT0.net] アドバンスフィルタ使うとか。
192 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 21:42:26.79 ID:u7lOGHHR0.net] >>188 activecellは rangeオブジェクト rangeオブジェクトは必ずどこかの実態セルに紐付けしないと設定、参照できない なので、実態セルを使いたくなければ、仮想的に実装するしかない 全てを網羅するには、それは非現実的(ムダ)だから私ならやらない あとの判断はお任せする (may be. GL)
193 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 21:50:56.66 ID:vmSiEfoS0.net] ここには北海道のグラサンのスーパーハゲザーこないのー?
194 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 22:03:15.47 ID:xOT/WAE8x.net] >>190 セルのコピーで済む処理をわざわざスクラッチする意味があるのか? マクロ言語で車輪の再発明をするのは無駄だし結果的に美しくないものが出来上がって終わりなことが多いぞ まぁ文字列書式の取得をするならRange.Charactersクラスを対象にForで一文字ずつループを回して、Fontプロパティで取れる各フォント属性を調べて構造体配列に格納していけば良い Characters(i, 1)とか指定すれば一文字ずつ調べられる 具体的にはFontクラスのうち Bold, ColorまたはColorIndex, FontStyle, Italic, Name, Size, ThemeColor, ThemeFont, Underlineあたりを取得しとけば何とかなるんじゃないか
195 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 22:26:10.14 ID:reWWVMAr0.net] >>192 >>194 内部データとして、特定の文字だけボールドにしたり赤字にしたりしたデータを 保持しておいて、それをそのままセルに貼れないだろうかという趣旨でした 全然実用性のない例ですが、何らかの名簿データを元データとして入力すると して、「佐藤」という名字だけを赤で表示したい、というケースがあったとします。 このとき、表示するときに年齢別だったり性別だったりの条件で抽出したりする 際に、毎回セルにデータを書き込むときにフォントの設定をする必要があるのか、 一度設定済みのデータを貼れば済むような方法があるのか、という質問でした 現在は毎回貼るたびにフォントの設定をしているので、もっと効率的な方法が あるのではないかと考えた次第 でも残念ながら、どうやらなさそうですね 確かにセルをコピーすれば済む話なので、断念します
196 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 23:09:32.16 ID:u7lOGHHR0.net] >>195 鈴木 健二 の鈴木だけを赤文字に設定したセルの書式コピーして 鈴木 太郎 セルに貼り付けしても、鈴木だけを赤にはできなかった (バージョンによって違うかもだが) ロジックでやるしかないんじゃないかな 鈴木or宇都宮を赤にするとか
197 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 23:41:09.25 ID:reWWVMAr0.net] >>196 色々ありがとうございます 今回やりたいのは、鈴木だけを赤くした「鈴木 健二」というセルを作るのに、 事前にデータを作ってからセルに貼り付けたいということですから、 「鈴木 太郎」の「鈴木」が赤くならなくても特に問題ありません この例で言うなら、コピペ以外の方法で、同じく鈴木だけが赤くなった鈴木健二の セルを効率よく作りたい、ということですね
198 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 00:19:45.02 ID:4IcKy9Blx.net] >>197 構造体とかでパラメータ設定すればやれないことはない 書式設定対象の文字列の開始オフセット位置と文字列長、フォント属性の設定値からなる構造体配列を作って、一括でRangeオブジェクトのプロパティに代入すれば良い ただしパラメータを動的に指定する処理やらUIやらを構築する手間とか考えたら結局セルコピーでよくねってなる
199 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 09:13:02.87 ID:m/MVfWr2M.net] office2010から2016へ変えたらマクロの遅さが気になって セルコピーを別の方法でやれないか考えてる
200 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 10:54:11.14 ID:sgFeqmUl0.net] マクロが遅いんじゃなくてPCのスペックが貧弱過ぎるんじゃないか
201 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 11:54:58.14 ID:M+v9sXGU0.net] >>198 そこまでする価値はないですね 自分が知らないだけで、なにか簡単な方法があるのではないかと思って いたのですが、そもそも需要がない動作なんでしょうね
202 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 12:26:41.63 ID:cYIprE7S0.net] >>199 変えたのはExcelだけか? 実はOSを10に変えた時にExcelも入れ替えたのではなく?
203 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 14:42:00.45 ID:qo1j1gBdx.net] >>201 そこまでやるならmhtか何かでコード生成してからxls変換してレンダリングする方がいいよねって話になってしまうからな
204 名前:デフォルトの名無しさん mailto:sage [2019/12/27(金) 23:18:51.19 ID:89CBNjra0.net] んあ
205 名前:デフォルトの名無しさん mailto:sage [2019/12/27(金) 23:55:11.89 ID:kLvnMS830.net] 北海道のグラサンスーパーハゲザーはここにはこないのー?
206 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 10:04:17.04 ID:Ht/sR5FE0.net] 北海道にいるんだろ
207 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 11:09:10.42 ID:iMlStgtR0.net] あなたのハゲにサクセスしたい
208 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 17:00:07.97 ID:SHykekh8a.net] 休みに入って大人しくなったな
209 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 22:49:57.07 ID:/3koq0Lq0.net] フォルダ名を取得し名前を変える処理をしたいのですが、フォルダ名の頭に0がついているとセルに取り込んだ際、数値扱いされきえてしまいます。何かいい方法ないでしょうか? ほぼネットから引用したものですが。。 Sub folder() Dim folderPath As String folderPath = Sheets(2).[B1] Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim n As Variant n = fso.GetFolder(folderPath).SubFolders.Count If (0 < n) Then Dim I As Long I = 1 Dim f As Object For Each f In fso.GetFolder(folderPath).SubFolders Cells(3 + I,1).Value=Str(f.Name) I = I + 1 Next f End If End Sub
210 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 22:54:36.69 ID:Oh0xulqx0.net] >>209 ・セルの書式を予め文字列にしておく ・ Cells(3 + I,1).Value = "'" & Str(f.Name) ・セルに取り込まずに処理する どれか
211 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 23:43:11.75 ID:/3koq0Lq0.net] >>210 頭に「'」つける案いただきます! すっかり頭からぬけておりました。 ありがとうございます!
212 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 00:01:52.13 ID:KGMPhTA00.net] >>209 頭に'付けるとかセルの表示形式を文字にするとか それVBAじゃなくてExcelの範疇では
213 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 00:13:18.61 ID:4cnj/64c0.net] VBAはそもそもビジュアルベーシックフォーアプリケーション エクセル(他office製品)のための言語 Excelの範疇も何もないよ
214 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 00:44:32.37 ID:C9nM6Ix2x.net] セルにフォルダ名を入れなきゃならない理由が全く分からない
215 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 00:52:53.68 ID:m04meMbs0.net] PowerQueryにデータの参照元渡すとか
216 名前:デフォルトの名無しさん [2020/01/02(木) 11:28:52.88 ID:yN8yk3jo0.net] マクロでCSV書き出ししたデータですが どうも1行ごとに最後のセルの末尾に勝手に改行コードが入っているようです これはなんとかならないでしょうか その改行コードもCRLFで言うところのCRだけのようで、見かけ上全くわかりません aaa,ddd,ccc とあったら、cccの末尾に見えないCFが張り付いている感じです urlエンコードで見ると ccc%0D みたいな感じです どうしたら綺麗に書き出せますか?
217 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 12:02:15.68 ID:33UW29zWd.net] >>216 改行コードをなくした場合、行の区切りはどうするの? 完全に思い通りにしたい時はテキストファイルの生成を自力でやるしかない
218 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 12:48:11.80 ID:/IgTqK/90.net] セル内で改行しても平気か確認した方がいい
219 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 12:53:49.13 ID:KGMPhTA00.net] >>216 ExcelではLFがセル内改行、CRLFが次の行 CRは意味を持たないので入ってても改行されない 消したければ普通にその文字を消せばいい
220 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 12:58:08.65 ID:KGMPhTA00.net] あと勝手に入ってるのではなく元々のテキストファイルに入ってるんだろう
221 名前:デフォルトの名無しさん [2020/01/02(木) 15:17:06.96 ID:yN8yk3jo0.net] 216です >>217 csvの中のデータとして配列に入っています。書き出したcsvは普通に数行のカンマ区切りです。 それをjavascriptで配列へ取り込みしたときに、 二次元配列データの一行の最後のデータの末尾に毎行追加されている感じです。 配列内 aaa,ddd,ccc%0D aaa,ddd,ccc%0D aaa,ddd,ccc%0D csvとしての改行・配列構成は崩れていません。 ちなみに書き出しは ActiveWorkbook.SaveAs Filename:=csvName, FileFormat:=xlCSV です。win7時代に作ったマクロをwin10で使っていますが、それもあるんでしょうか… >>219 EXCELの改行仕様は知りませんでした。ありがとうございます。 末尾に列を1つ増やしたら取りたいデータにはつかなくなったので (おそらく、増やした列に%0Dが移動したのかとw)、 若干気持ち悪いですが、趣味プログラムなので運用で対応します。 みなさんありがとうございました。
222 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 16:37:15.04 ID:yYKIO5swM.net] 北海道のグラサンスーパーハゲザーはここにはこないのー?
223 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 17:52:03.38 ID:YgEQc8yF0.net] >>216 Excelのsheetに読み込んでから、CRLF等を""に置換する ではダメ?
224 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 21:25:07.68 ID:ShHqIFTQ0.net] 一般論として例えば、Ruby のCSV の規格にも、 行区切り文字・列区切り文字・クォート文字などがある 特に設定しないデフォルトでは、それらは、 改行コード・カンマ・ダブルクォーテーションになる もし、それらが無ければ、CSVの要件を満たさないw つまり、CSVの規格ではありませんw
225 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 23:23:58.57 ID:1vLrUBFwa.net] ルビカスが何を言おうと、世の中ではExcelが出力するCSVが標準のCSVだ
226 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 10:32:03.45 ID:R/lajPDg0.net] CSVは自前でテキストファイル読み込み+自前で区切り扱いが基本。 区切りが何であろうと、データの形式が何であろうと全て自分でコントロール出来るし速度も速い。
227 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 12:29:48.12 ID:V2sewd5k0.net] 同意。てか、Excel標準のCSV読み込み仕様もうちょっとなんとかなりませんかね・・・? それはさておき>>216 &>>221 (もう見てないかもだけど) その「CSVファイルを配列に取り込むJavaScript」のコードに問題があるんじゃないかなと。 具体的には\n(%0A)でSplitしてるから\rが残ってるだけだと思うけどな。
228 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 18:33:14.85 ID:LoHkYQxe0.net] 使い続ける以上CSVとの戦いは続くのだ
229 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 18:50:10.73 ID:k7eftYc7x.net] モダンExcelが一般化してきた今ならクエリでCSVの開き方を指定して読み込むのがいいんじゃないの CSVをエクセルで直接開くといろいろ勝手なことをしてくれるので
230 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 19:06:41.78 ID:esau8hBed.net] PowerQueryのコードを書くのはVBA以上にハードルが高いぞ
231 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 19:55:22.39 ID:3Uhjf7eSM.net] PowerQueryコード書かなきゃいけないの? GUIでできる範囲だと不十分なの?
232 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 19:58:54.81 ID:k7eftYc7x.net] そんなにハードル高いか? テキストファイルの読み込みの処理をスクラッチするより明らかに楽だし処理速度も速いと思うが 例えば4列のCSVをSJIS(Windows-J31)でデコードしてカンマ区切りで読み込んでSheet1のA1セルから書き出すとしたらこんな感じ Sub ReadCSV() With Worksheets("Sheet1") With .QueryTables.Add(Connection:="TEXT;ソースファイルのパス", Destination:=.Range("A1")) .TextFilePlatform = 932 .TextFileCommaDelimiter = True .RefreshStyle = xlOverwriteCells .TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat) .Refresh .Delete End With End With End Sub
233 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 20:07:37.72 ID:k7eftYc7x.net] PowerQueryだったらもっと簡単だろう Csv.Documentにソースのパスとメタ情報を渡してテーブルを取得するだけだしGUIでステップ記録できる
234 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 20:56:20.20 ID:LoHkYQxe0.net] CSV読み込みの話してんのになんで書き込みの回答してんだろうこの子
235 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 21:32:33.80 ID:k7eftYc7x.net] >>234 >>232 のコードについて言ってるなら、読み込んでシートに書き出してるわけで、クエリの使い方としてはオーソドックス処理だぞ 読み込んだ結果をシートに書き出さないならODCにデータモデルとして保存すれば良い
236 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 22:10:30.43 ID:k7eftYc7x.net] >>235 ODCにデータモデルとして→× データモデルとして→○
237 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 22:23:49.87 ID:X7hap7HH0.net] >>230 全然。 基本的にはリボンの機能使った操作が1つずつのステップになっていく。 ステップの1つ1つがマクロみたいなもの。 「詳細クエリー」を見て初めて「コードはこうなってるんだ・・・」 という感じ。 もっとも、M Functionのレファレンスやパラメータあたり説明が 英語でもまだ不親切なので、 使えてない部分が多分にはあるけど。 ただ、VBAのように出来る範囲が広範囲なわけではなく、 取得したデータの成形に特化してる。 スクレイピングについては Pythonみたいに取得対象のWeb画面で IDやパスワード入力するとか、 ボタンを押すみたいなことも出来ない模様。
238 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 22:43:05.12 ID:3zmXV6NNx.net] データの成形に特化と言ってもVBAでスクラッチすると恐ろしく面倒なJoinとかのSQLチックな処理は全て実行できるので、データ処理の面ではVBAより手軽で便利 あとAccessDBやSQL ServerやOBDCはもちろん、ファイルシステムとかExchangeサーバとかSharePointリストとか、およそデータベースとして扱えるデータストアの情報は全て取得できる フォルダ内のファイルの属性情報を取得する処理のためだけにいちいちFileSystemObjectのインスタンスとかを使ってスクラッチする必要がなくなると考えればめちゃくちゃ便利
239 名前:デフォルトの名無しさん [2020/01/04(土) 15:59:54.32 ID:dDunGyfu0.net] >>227 みています ご指摘の通り、\nでspritかけてました! \nってCR+LFじゃなかったんですね… この後都合があるのですぐには試せませんが、 その辺確認してみます。 ありがとうございます!
240 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 16:12:12.74 ID:8fEwlZFG0.net] \nはLFじゃなかったか windowsの改行は\r\nだったような
241 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 17:52:00.86 ID:ALZ03HNg0.net] EditBoxでは\r\nでRichEditBoxでは\nだねWindows
242 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 17:56:48.54 ID:+4weKQQc0.net] CR+LFの定数の vbCrLf か vbNewLine でいいんじゃね
243 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 18:04:55.94 ID:8fEwlZFG0.net] vbNewLineいいよね
244 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 18:23:56.78 ID:ZrFrOERU0.net] >>239 やっぱり。 >>240-241 の人もいうとおり、OSだけじゃなくAPI関数ごとに改行コードの取扱いが違ったりすることもあるし、 テキストエディタに内蔵されてる正規表現なんかでも「\n」でCRLFに対応させてる例もあったりするから、 その辺はトライ&エラーで覚えていくといいとおもうよ。
245 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 18:40:58.78 ID:HwWXKum00.net] 北海道のグラサンスーパーハゲザーはここにはこないのー?