■ このスレッドは過去ログ倉庫に格納されています
Excel VBA 質問スレ Part67
- 1 :デフォルトの名無しさん :2020/06/26(金) 02:01:29.56 ID:uDfmpksE0.net
- !extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part66
https://mevius.5ch.net/test/read.cgi/tech/1589085825/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 953 :デフォルトの名無しさん :2020/08/27(木) 21:54:27.65 ID:M2V0MDYQM.net
- >>950
とりあえずAddDllDirectoryのDeclare定義と呼び出してる部分のコード晒してよ
Unicode文字列の渡し方って1つじゃないから定義がわからないとなんとも言えん
- 954 :デフォルトの名無しさん :2020/08/28(金) 03:17:22.48 ID:0Wmy1rK2r.net
- >>952
CSVファイルではなく、CSVの文字列になります
これをファイルに保存することなくパースしたかったのですが、方法が見つかりませんでした。
セル内カンマやセル内改行も含むCSVでしたので、自分でパースするのもちょっと大変でした。
MITライセンスのコードを見つけたのでそれを組み込んで処理しようと思います。
ありがとうございました。
- 955 :デフォルトの名無しさん :2020/08/28(金) 09:32:14.87 ID:WbcjPKym0.net
- >>950
明らかにおかしいのはStrConv以外だから
元々使い方間違ってただけで変換に問題はない
最少構成でやってみたらわかるはず
- 956 :デフォルトの名無しさん :2020/08/28(金) 10:58:16.31 ID:CzRmvnjE0.net
- Ruby なら標準で、CSV モジュールが付いている。
他にも、JSON, YAML などもパースできる
プログラミングするなら、ちゃんとしたプログラミング言語を使わないと、ダメ!
汎用的な機能を、自作して使うと、バグってばかりで仕事にならない
- 957 :デフォルトの名無しさん (ワッチョイ 822f-25h5):2020/08/28(金) 12:55:46 ID:dgSTJFNK0.net
- そもそもここ最強のcsvパーサEXCELのVBAすれなんだが
- 958 :デフォルトの名無しさん :2020/08/28(金) 13:14:57.90 ID:RBhGMmXKM.net
- 確かにExcelは世界一利用者の多いCSVパーサかも
- 959 :デフォルトの名無しさん (ワッチョイ 6e63-VQ5f):2020/08/28(金) 23:36:31 ID:KRJ+x4lY0.net
- エクセル2010を使ってます。
ファイル名の先頭に前月の年と月を付けたいと思い
下のような式を書きました。
本日動かすと「202007」と付きます。
しかし先頭の20を削除し2007としたいです。
式をどのようになおしたら良いか自力ではわかりません。
お恥ずかしいですがご教示いただきたく。
newfilename = Format(Year(DateSerial(Year(Date), Month(Date) - 1, Day(Date))), "00") _
& Format(Month(DateSerial(Year(Date), Month(Date) - 1, Day(Date))), "00") _
& currentfilename
- 960 :デフォルトの名無しさん (ワッチョイ 0d7c-JMbW):2020/08/28(金) 23:42:18 ID:6tfEVBvr0.net
- >>959
ヘルプでformatの書式見た?
- 961 :デフォルトの名無しさん (ワッチョイ 06c9-1etN):2020/08/28(金) 23:47:50 ID:X3zZxqmk0.net
- newfilename = Format(DateSerial(Year(Now), Month(Now) - 1, 1), "yymm")
- 962 :デフォルトの名無しさん (ワッチョイ 52ee-yRqa):2020/08/29(土) 00:17:46 ID:58gyTBSb0.net
- 来年でIEなくなるんか?
IE制御で作ったVBAファイルはどうなってしまうん
https://news.livedoor.com/article/detail/18778408/
- 963 :デフォルトの名無しさん (ワッチョイ 6e63-VQ5f):2020/08/29(土) 00:20:59 ID:M2c3GV/+0.net
- >>960
ヘルプといいますが色々なサイトを見ましたが私の頭では理解できず・・
やむを得ずお伺いしました
>>961
この式で出来ました!本当にありがとうございます!
- 964 :デフォルトの名無しさん (ラクッペペ MM66-i8JQ):2020/08/29(土) 00:54:05 ID:OUCG9mQHM.net
- 00014500-1
のような、数字以外が入ってる文字列から
前ゼロを取りたいです。
どうすれば良いでしょうか
ゼロは先頭以外にもあるので
replaceで削除するのは無理です。
- 965 :デフォルトの名無しさん :2020/08/29(土) 01:26:16.94 ID:uG4P+RAn0.net
- >>964
自分の意思で呼吸を30分止めてご覧
それができなければVBAを使う資格なし
- 966 :デフォルトの名無しさん :2020/08/29(土) 01:42:59.60 ID:haGEh7ED0.net
- >>964
020-040 は 20-40 にすればいいの?
- 967 :デフォルトの名無しさん :2020/08/29(土) 04:49:38.60 ID:OUCG9mQHM.net
- >>966
はぃ、それで良いです
言葉足らずですみません
- 968 :デフォルトの名無しさん :2020/08/29(土) 05:11:12.22 ID:nRBZReLEM.net
- >>967
Sub Macro1()
Dim s1 As String
Dim s2 As String
Dim s3 As String
Dim c As String
Dim i As Integer
s1 = "001100-004400-007700" '入力
s2 = ""
s3 = ""
For i = 1 To Len(s1)
c = Mid(s1, i, 1)
If "0" <= c And c <= "9" Then
s2 = s2 & c
Else
If s2 <> "" Then
s3 = s3 & s2 * 1 & c
s2 = ""
Else
s3 = s3 & c
End If
End If
Next
If s2 <> "" Then
s3 = s3 & s2 * 1
End If
Debug.Print s3 '出力
End Sub
- 969 :デフォルトの名無しさん (ワッチョイ 45da-1etN):2020/08/29(土) 05:37:03 ID:IjPanbf80.net
- 入力データにピリオドが入ることはないのか?
- 970 :デフォルトの名無しさん (ワッチョイ 45da-1etN):2020/08/29(土) 05:42:52 ID:IjPanbf80.net
- あ、平気か
- 971 :デフォルトの名無しさん :2020/08/29(土) 06:40:50.33 ID:VAMGDei30.net
- そんな難しいことしなくてもこれでよくないか
Sub test()
Dim testStr As String
Dim rtnStr As String
Dim cnvNm As Long
testStr = "000070-00100-01230"
For i = 1 To Len(testStr) + 1
s = Mid(testStr, i, 1)
'数値か判定
If (IsNumeric(s)) Then
strNum = strNum + s
Else
'数値に変換
cnvNm = Val(strNum)
rtnStr = rtnStr + Trim(str(cnvNm)) + s
strNum = ""
End If
Next
End Sub
- 972 :デフォルトの名無しさん :2020/08/29(土) 06:44:47.53 ID:VAMGDei30.net
- 区切り文字が-だけならsplitして終わる気もするけど
何が入ってるかわからんなら1文字ずつみるしかないのかな
- 973 :デフォルトの名無しさん :2020/08/29(土) 07:17:10.36 ID:OUCG9mQHM.net
- 区切りはハイフンだけです
すみません
分けて各々数字扱いすれば良かったですね
書いてみます
- 974 :デフォルトの名無しさん (ワッチョイ 6101-u5JS):2020/08/29(土) 08:56:00 ID:VAMGDei30.net
- デリミタが"-"だけならもっと簡単になるね
Sub test2()
Dim strArray() As String
Dim rtnStr As String
testStr = "000070-00100-01230"
strArray = Split(testStr, "-", , vbTextCompare)
For i = 0 To UBound(strArray)
rtnStr = rtnStr + Trim(str(Val(strArray(i))))
If(i <> UBound(strArray)) Then rtnStr = rtnStr + "-"
Next
End Sub
文字列で連結して返す必要なければsplitして数値変換でおわり
- 975 :デフォルトの名無しさん :2020/08/29(土) 09:09:11.49 ID:dZuEnb/K0.net
- しかし今の子はこの程度も分からないほど論理的思考がないのか、
それともこのスレの住民を試そうとしているのか
- 976 :デフォルトの名無しさん :2020/08/29(土) 09:45:04.26 ID:SoqUgBeq0.net
- 使う関数提示するくらいで解決できなきゃ放置でいいんじゃね?
- 977 :デフォルトの名無しさん :2020/08/29(土) 10:00:53.07 ID:pUlaC/XX0.net
- For r = 1 To 12000
処理
PDF出力
という処理をしているのですが、これだとPDFが12000ファイルになって、全て出力した後で結合するのですが
これを12000枚程度をPDF1ファイルで出力する方法をおしえてください
- 978 :デフォルトの名無しさん :2020/08/29(土) 10:07:03.64 ID:m9X9gCs/M.net
- Sub test2()
Dim strArray() As String
Dim testStr As String
Dim rtnStr As String
testStr = "000070-00100-01230"
strArray = Split(testStr, "-")
For i = 0 To UBound(strArray)
strArray(i) = strArray(i) * 1
Next
rtnStr = Join(strArray, "-")
Debug.Print rtnStr
End Sub
- 979 :デフォルトの名無しさん :2020/08/29(土) 10:19:55.18 ID:wR6MYEok0.net
- >>977
元データが何なのか知らんけど、
シート上のデータなら、12000ページを1シートにまとめてから出力。
- 980 :デフォルトの名無しさん :2020/08/29(土) 10:47:19.93 ID:dZuEnb/K0.net
- 12000ページのPDF・・・
ほんとに聞きたい事なの?これ
- 981 :デフォルトの名無しさん :2020/08/29(土) 10:47:46.31 ID:lHm5nrxO0.net
- >>974
Split使うならJoinも使おうよ…
Sub test2()
Dim strArray() As String
Dim rtnStr As String
testStr = "000070-00100-01230"
strArray = Split(testStr, "-", , vbTextCompare)
For i = 0 To UBound(strArray)
strArray(i) = Cstr(Val(strArray(i)))
Next
rtnStr = Join(strArray, "-")
End Sub
- 982 :980 :2020/08/29(土) 10:48:58.87 ID:lHm5nrxO0.net
- ってすでに書かれてたわ… Orz
- 983 :デフォルトの名無しさん (ブーイモ MM4d-xiBb):2020/08/29(土) 10:55:28 ID:jdj2nRjtM.net
- >>980
何かの文書ならともかく、ExcelのPDF化で1万ページは非現実的だよね
自分の会社で使うだけならDB化するのが普通だし
役所に提出する測定資料とかかな?
- 984 :デフォルトの名無しさん :2020/08/29(土) 11:18:02.61 ID:ebvcDddx0.net
- ある言語だと
"00-001-02"split("-")map(asNumber)join("-")println
- 985 :デフォルトの名無しさん :2020/08/29(土) 11:19:35.12 ID:0Ji7S1+0a.net
- >>977
for
処理
PDF
Next
にしてるってこと?
ならPDFをNextの後に書けば良いんだけど
- 986 :976 (ワッチョイ 45cc-pyQU):2020/08/29(土) 13:57:00 ID:pUlaC/XX0.net
- >>979
1シートにはまとめられません。
>>980
日々の取引をデータベースに入力していて、そのデータベースから出力されたデータを取引伝票としてPDF化したいのですが
データベースソフトに取引伝票の書式が設定されていないので、エクセルで作ろうと思います。
1ページごと出力してフリーソフトで結合すると、12時間くらいかかっていたので、エクセルのPDF結合だとAcrobatPro
が必要になるそうなので、この方法もできません。
>>985
シート上に帳票を作り、その帳票をページごとに書き換えています。試していませんが、1シートだと行数が足りないです。
それと、ページごとに罫線とかの書式を作るのはつらいです。
- 987 :デフォルトの名無しさん :2020/08/29(土) 14:17:55.39 ID:dZuEnb/K0.net
- >>986
12時間かけて作った12000ページのPDFは実用に耐えてるの?
それ、手段の一つが目的になっちゃってない?
- 988 :デフォルトの名無しさん :2020/08/29(土) 14:32:50.04 ID:D+h94FkM0.net
- >>986
よくわからないけど、何とかデータをエクセルの表にして、ワードの差し込み印刷でやる、とかはどう?
- 989 :デフォルトの名無しさん :2020/08/29(土) 14:38:51.56 ID:fy0wFynXa.net
- PDF1ファイルにする理由はあるの?
120ファイルぐらいに分けるでしょ普通
- 990 :デフォルトの名無しさん :2020/08/29(土) 14:42:09.88 ID:1Tm3n33G0.net
- 伝票とかだと保存義務とかあったりして、出力しておいておかないとダメな時もある
1シートで収まらないならある程度で分割してやるしかないし
罫線とか決まったフォーマットならコピーするだけ
が、EXCELでやるのが間違ってるな
ちゃんとした帳票ツール買って対応する言語使えよ
- 991 :デフォルトの名無しさん (ワッチョイ 4d63-gth/):2020/08/29(土) 16:14:59 ID:EjHgD7140.net
- PDF化って言われても実コマンド書かなきゃアドバイスのしようもないわな
- 992 :デフォルトの名無しさん :2020/08/29(土) 19:10:04.48 ID:91aO+zvA0.net
- シートにまとめられない理由は?
まとめないとして、12000シート作れるスペックはあるのか?
- 993 :デフォルトの名無しさん (ワッチョイ 06c9-1etN):2020/08/29(土) 22:40:12 ID:LkUYL8wZ0.net
- >>962
これ、マジで困るわ・・・
- 994 :デフォルトの名無しさん (ワッチョイ 6e63-mUq2):2020/08/29(土) 23:53:21 ID:wkbqrDC+0.net
- サポート終了なんだからいつまでもIE使ってんじゃねえよ
- 995 :デフォルトの名無しさん (テテンテンテン MM66-nUCc):2020/08/30(日) 00:09:48 ID:HNjVBgM5M.net
- >>986
Accessでやって下さい
- 996 :デフォルトの名無しさん :2020/08/30(日) 07:04:48.97 ID:ZpZWI99c0.net
- IE制御で作る
てどういう意味です?
- 997 :デフォルトの名無しさん :2020/08/30(日) 08:58:33.06 ID:IZ41nY3ca.net
- テキストファイルを読み込もうとしているのですが、ファイルがないとエラーが出ます。なにが原因でしょうか?
Sub func()
Dim folderPath As String: folderPath = "G:\Test"
Dim textLine, fileName As String
Dim fileToOpen As Integer
Dim i As Integer
fileName = folderPath & "01.txt"
fileToOpen = FreeFile()
Open fileName For Input As fileToOpen
i = 1
While Not EOF(fileToOpen)
Line Input #fileToOpen, textLine
Cells(i, "A").Value = textLine
i = i + 1
Wend
End Sub
- 998 :デフォルトの名無しさん :2020/08/30(日) 09:03:16.96 ID:YG+IT5u+0.net
- Open "C:\Sample\Data.txt" For Input As #1
Line Input #1, buf
Close #1
- 999 :デフォルトの名無しさん :2020/08/30(日) 09:03:41.78 ID:yRrMkFD60.net
- フォルダーパスの最後に/足してみては?
- 1000 :デフォルトの名無しさん :2020/08/30(日) 09:05:06.49 ID:YG+IT5u+0.net
- フォルダとファイルの間に/がないとか
- 1001 :デフォルトの名無しさん (アウアウエー Sa0a-ifKp):2020/08/30(日) 09:13:38 ID:IZ41nY3ca.net
- フォルダパスに"\"が入っていませんでした。
ありがとうございます!
- 1002 :2ch.net投稿限界:Over 1000 Thread
- 2ch.netからのレス数が1000に到達しました。
総レス数 1002
279 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★