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
2 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 07:58:40.55 ID:PIx3bjtD0.net] >>1 おちゅ
3 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 19:07:55.93 ID:ZjxMZdyJ0.net] VBAでgrep検索を使いたいんだが教えてくれ。 https://website-note.net/vba/excel-grep-macro/ 上のサイトのコードをコピペして動くまではいいんだけど、もう一つ条件を加えて 'キーワードを含むセルの情報をアウトプット時にキーワードの右のセルをアウトプットさせるようにしたい。 そこでOptionButtonを2つ作ってOpB1がtrueのときに普通に動いて、falseのときに キーワードの右をアウトプットさせるコードを書いたんだがうまくいかない。 ifもselectcaseも試したんだけどだれか教えてくれ、VBA初心者で頭かかえてる。 つくったもの↓ 'キーワードを含むセルの内容 If OptionButton1.value =then 省略 .Cells(lcnt, 7).Value = rFoundCell.Value else 省略 .Cells(lcnt, 7).Value = rFoundCell.offset(0,1).Value
4 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 20:08:11.16 ID:SBXE4EMs0.net] ・OpB1って何ですか?丁寧に書いて ・せめてoutputCellInfoのソースは全部書いて ・=thenがガチなのかタイポなのか分からんから直打ちじゃなくてコピペして
5 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 20:20:30.07 ID:PIx3bjtD0.net] 日本語訳: 上のサイトのコードだと キーワードを含むセルの値が、G列に出力されます。 これを以下のように変更したいです キーワードを含むセルを検索したあと、このセルの値だけでなく、このセルのすぐ右側のセルの値をH列に出力したいです。 できたら、オプションボタンを新設して、右側セルの値を出力するかしないかを選択できるようにしたいです 面倒だから後はお前らにまかせた
6 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 20:26:55.66 ID:ZjxMZdyJ0.net] >>4 すみません、コードはります Private Sub outputCellInfo(ByVal sTmpPath As String, ByVal sFilePath As String, ByVal sTmpSheetName As String, _ ByVal rFoundCell As Range) Dim OptionButton1 As Boolean If OptionButton1 = True Then With ThisWorkbook.Sheets(STR_GREP_SHEET_NAME) .Cells(lcnt, 2).Value = lcnt - 7 .Cells(lcnt, 3).Value = sFilePath .Cells(lcnt, 4).Value = sTmpPath .Cells(lcnt, 5).Value = sTmpSheetName .Cells(lcnt, 6).Value = convertRange(rFoundCell.Column) & rFoundCell.Row .Cells(lcnt, 7).Value = rFoundCell.Value End With lcnt = lcnt + 1 Else: With ThisWorkbook.Sheets(STR_GREP_SHEET_NAME) .Cells(lcnt, 2).Value = lcnt - 7 .Cells(lcnt, 3).Value = sFilePath .Cells(lcnt, 4).Value = sTmpPath .Cells(lcnt, 5).Value = sTmpSheetName .Cells(lcnt, 6).Value = convertRange(rFoundCell.Column) & rFoundCell.Row .Cells(lcnt, 7).Value = rFoundCell.Offset(0, 1).Value End With lcnt = lcnt + 1 End If End Sub
7 名前:デフォルトの名無しさん (アウアウウー Sad3-fXbV) mailto:sage [2020/06/26(金) 20:40:26 ID:nEhmFRZ4a.net] なんでElseに:ついてんだ?
8 名前:デフォルトの名無しさん (アウアウウー Sad3-d3ZO) mailto:sage [2020/06/26(金) 20:40:29 ID:1oZqQJala.net] 張り付けたオプションボタンと定義したのは別物じゃね
9 名前:デフォルトの名無しさん (ワッチョイ 3f01-bXJj) mailto:sage [2020/06/26(金) 20:50:43 ID:PIx3bjtD0.net] つか、そもそもそのサイトのコードって正確に動く? キーワードを含むセルを網羅しないんだけど nothingになるRangeを比較対象に置いてるあたりがあれだ
10 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 21:05:20.01 ID:ZjxMZdyJ0.net] Elseの:はミスです… オプションボタンの定義…ググりなおします >>9 そうです、全文では無いんですよね…全文検索くんもDLして 編集しようとしましたが今の私では無理でした。
11 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:24:58.46 ID:SBXE4EMs0.net] >>6 ぱっと見で分かるのは、OptionButton1が再定義されてて目的の値を参照してない事 Dim OptionButton1 を消して、>>3 で自分で書いたようにOptionButton1.valueを評価してみて あと、オブジェクト名にButtonって入ってるからコントロールだと思うけど、 もしコマンドボタンならこの用途でValueプロパティは使えないから、チェックボックスにしよう 解説サイトのソースも修正 grepExcelSheetメソッド Loop While rTmpFoundCell <> rFoundFirstCell ↓ Loop While rTmpFoundCell.Address <> rFoundFirstCell.Address openExcelFilesメソッド sTmpPath = Dir(sFilePath & "*.xls") ↓ sTmpPath = Dir(sFilePath & "*.xls?") それに伴って Do While sTmpPath <> "" 内の文を If Not sTmpPath Like "*." & ThisWorkbook.Name Then 〜 End If で括る 細かいこと言うと、Blean型を判定するときにリテラルと比較(= True や = False)はカッコ悪いから止めた方がいい 解説サイトではやってるけどね
12 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:25:32.05 ID:ZjxMZdyJ0.net] >>3 です 無理やりですが自己解決しました 標準モジュール2にアウトプットのコードをさわったものをコピペして コマンドボタンクリックしたときの動作をIfでCallするようにしたら出来ました でもやっぱりこのコード重いですね。どうにか軽くする方法無いものですかね。
13 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:28:15.39 ID:ZjxMZdyJ0.net] >>11 修正ありがとうございます、提案されたやり方も試してみます!
14 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:49:56.02 ID:kQH1YyZn0.net] 配列にすれば あとやってるかとは思うけど自動計算と画面更新オフ
15 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 23:53:39.92 ID:ZjxMZdyJ0.net] すみません、配列にするとはどういうことをすることですか?
16 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:17:07.69 ID:KqbSykww0.net] Cells(1, 1).Value = "あ" Cells(1, 2).Value = "い" Cells(1, 3).Value = "う" ↓ ↓ ↓ Range("A1:C1").Value = Array("あ", "い", "う") 1個ずつじゃなくて、一気に放り込めってことでしょう。>>15
17 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 02:29:31.12 ID:gCUCp3Nd0.net] そこを高速化してもしかたないのでは・・・
18 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 05:22:36.02 ID:J5vHObt/0.net] 他人にコード書かせて動かしたら遅いと文句言うのって人としてどうなの?
19 名前:デフォルトの名無しさん [2020/06/27(土) 08:53:12.31 ID:9qJBLgyD0.net] >>
20 名前:デフォルトの名無しさん [2020/06/27(土) 09:24:13.86 ID:YKskLwzM0.net] <<
21 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 09:43:15.25 ID:wwwZDyDia.net] ビットシフトとは各桁を 1 桁左や右にずらすことです。 https://www.tipsfound.com/vba/02018 VBA にはそのような演算子はありませんが次のようにしてできます。 \ (2 ^ 1) ' 1 桁右へシフト * (2 ^ 1) ' 1 桁左へシフト
22 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 10:06:21.20 ID:lV2RRwzl0.net] 実行時エラー '6': オーバーフローしました。
23 名前:デフォルトの名無しさん [2020/06/27(土) 10:49:37.32 ID:gKvpRzl30.net] 今日は、タイマー作ってます。 IeTimerに Private Sub IeTimer1_Timer() Me.Label1 = Now Me.IeTimer1.Interval = 1000 - (Timer Mod 1000) End Sub とかいて見たのですが、何か一秒の長さが変に感じます。 気のせいなんでしょうか?。 Excel 97 OS;Windows 98 機種;NEC VersaPro NX VP13C
24 名前:デフォルトの名無しさん [2020/06/27(土) 10:55:33.95 ID:gKvpRzl30.net] 今日は、タイマー作ってます。 MsgBox 36000*24 はエラーにならないが MsgBox 24*3600 は実行時エラーオーバーフローしました。 となります。 どうしてなんでしょうか?。
25 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 11:02:47.04 ID:aTkq7ke+a.net] >>23 教えてキャン>>98 <<ビー https://oshiete.goo.ne.jp/qa/597623.html >Win98系のOSの場合ですが、処理中に、 頻繁にDoEventsを実行する必要があります。 これは、OSの特性です。
26 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 11:13:07.90 ID:lV2RRwzl0.net] 釣りなのか本気なのか判断に困る質問だな
27 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 11:48:36.47 ID:P+1UXm0n0.net] ヤベーイ
28 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:20:44.51 ID:J5vHObt/0.net] 動作がおかしいのは古いからじゃないかな
29 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:22:47.53 ID:/mLredfO0.net] VBAで宣言せずに数式を書くと、式の中で最初に出てきた数字によって型が勝手に決められる仕様 小数点があったら、小数点以下が0でもDouble型 32767以下の整数はInteger型 32768以上の整数はLong型 になる だから「24*3600」という式を書くと、最初に出てくる数字は24だからInteger型とみなされて、24*3600はInteger型の制限範囲を超えてるからエラーになる 変数を使わずに数値の型を指定したい時は型文字を使うか実数型にしてしまう この場合は 24& * 3600 (Double型) 24.0 * 3600 (Double型) 24# * 3600 (Long型) と書けばエラーにならない ちなみにVBA(Excel)のバージョンは関係ない 最新でも仕様は変わってないから同じ所でエラーになる
30 名前:デフォルトの名無しさん (ワッチョイ 3f01-bXJj) mailto:sage [2020/06/28(日) 07:42:30 ID:sqW+tWgm0.net] >>29 へー面白いね
31 名前:デフォルトの名無しさん (ワッチョイ 3f7f-nmuj) mailto:sage [2020/06/28(日) 07:45:50 ID:/E8O58u/0.net] プロジェクトウィンドウが何かの表紙に名前順にソートされてしまったんですが、標準モジュール、クラスモジュール等の階層表示ってどうやって戻すのでしょうか
32 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 08:01:52.55 ID:8pre44tM0.net] フォルダーの切り替え(黄色いフォルダの絵のアイコン) をクリック
33 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 11:43:32.56 ID:VHBre49Bd.net] >>30 結構、常識だよ。 こういうエラーの時に真っ先に考える。 覚えておくと良い。 詳しく覚えなくても、勝手に型判定のせいかなと考えるだけで全然違う。
34 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 12:14:58.87 ID:dFUOn9oJ0.net] 適当なこと言っててワロタ
35 名前:デフォルトの名無しさん [2020/06/28(日) 13:50:31.47 ID:Gnbk8j2I0.net] >>34 何が適当なんだ? 言語仕様の基本だろう >>33 に俺を言うべき
36 名前:デフォルトの名無しさん [2020/06/28(日) 13:50:52.16 ID:Gnbk8j2I0.net] 俺ではなくお礼
37 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 14:21:14.54 ID:t+bqi6uL0.net] 俺
38 名前:デフォルトの名無しさん (ワッチョイ 8ff1-of6p) [2020/06/28(日) 14:41:16 ID:O22xrl4H0.net] >>33 俺
39 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 15:17:28.32 ID:IDO0V0ZPa.net] dim 俺 as string
40 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 16:12:05.93 ID:WMjrpZfvF.net] 俺 = "童貞"
41 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 16:56:51.40 ID:69pcuKP2M.net] Const 俺 As String = "童貞"
42 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 17:02:14.70 ID:YhC9oGcZa.net] Do While 俺 俺 = 1 If 俺 > 1 Then Exit Do End If Loop MsgBox "happy"
43 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 17:20:31.84 ID:dFUOn9oJ0.net] >>35 式の中で最初に出てきた数字によって型が勝手に決められる → 嘘 32767以下の整数はInteger型 → 嘘 24& * 3600 (Double型) → 嘘 24# * 3600 (Long型) → 嘘 これで適当以外の何なんだよ
44 名前:23 (ファミワイ FFb3-pKDl) [2020/06/28(日) 17:53:16 ID:n2mRaag0F.net] Timerに1000を掛けて見ても何か変だと思ったら 想定より早くIeTimerが実行される時があるみたいだ。 マシンの性能が良すぎるんですかね。 取り敢えず+200にして解決としときます。 MsgBoxの方は型とか考えたくないので 兎に角勉強になりました。 ありがとうございました。
45 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 19:11:04.99 ID:LbQBFJ/O0.net] >>24 MsgBox 24 * 3600 MsgBox 24 * 36000 1行目はオーバーフローがでる 2行目はエラーが出ないで普通に計算されます
46 名前:デフォルトの名無しさん [2020/06/28(日) 19:21:56.72 ID:nTfCGwDP0.net] 特定のフォルダ内のファイルのファイル名を変えて、ついでにプロパティのコメントにも文字を入力したいです for each f in fol.files f.name=ファイル名 f.comment=コメント next みたいな感じでやりたいんですが、f.commentではだめなようです どう書けばいいか教えてください
47 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 19:23:35.13 ID:LbQBFJ/O0.net] Integer型 * Integer型 の計算結果が 32767を超えるとオーバーフローエラーがでる Integer型 * Long型 の計算結果が 32767を超えてもエラーにならない ってことじゃね
48 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 19:28:31.58 ID:Vk36drdU0.net] win10でRS-232C使うとかなりの確率で Set MSComm1 = New MSComm のところでエラーになります どうにかなりませんか
49 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 19:52:40.03 ID:LbQBFJ/O0.net] >>48 EasyComm ってのに変えたほうがいいかも
50 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 20:30:15.72 ID:LbQBFJ/O0.net] >>46 変更後のファイル名が重複するんじゃね
51 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 20:32:56.52 ID:LbQBFJ/O0.net] >>46 あとファイルの種類によってはコメントが無いのもある
52 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 20:35:06.31 ID:+IGHtKO4a.net] イジカミジゴー
53 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 20:39:46.50 ID:yfJkjLDvM.net] >>48 Win32API直叩きしたら? 自分で全部管理できるし、枯れた技術で安定してる
54 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 21:16:46.93 ID:yxdrwHPGa.net] >>52 B'z乙
55 名前:デフォルトの名無しさん (アウアウウー Sad3-d3ZO) mailto:sage [2020/06/29(月) 10:38:25 ID:2N59jCILa.net] excel標準でmscommの開発用のライセンス無いよね?
56 名前:デフォルトの名無しさん (アウアウカー Sac3-jwjG) [2020/06/29(月) 13:58:37 ID:T8IL5X90a.net] B1の値に応じて、C1からC100の値が変動します A1からA100までの文字列をB1に順番に入れていって、1回ごとにC1からC100を別シートのD列に上から順にコピーしていきたいです A1からA100とC1からC100は、必ずしも100まで値が埋まっているわけではなく、途中までしか埋まっていないこともあります 別シートにコピーするときに、C列の空白分はコピーしないでD列に空白行を作らないようにしたいです Array = Range(A1:A100)で配列になるらしいんですが、Forでループさせるときに1個ずつB1に入れていくところでつまずいてます ここからどうやってA1からA100までを順番に取り出していけばいいのでしょうか? それと、C列をコピーするときに空白のところまでで選択を止めて必要分だけコピーするにはどうすればいいですか?
57 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 14:21:14.85 ID:81b3XCdqM.net] 二次元配列を一つずつ取り出すときはArray(上からの番号,1) 空白行までのコピーは with worksheets(1) .Range(.Cells(1,3) ,.Cells(1,3).End(xldown)).copy end with
58 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 15:29:59.45 ID:TB+oeC/70.net] どういう配列が作られたのかがそもそもわかんないって話でしょ? デバッグの仕方覚えて、Arrayに何が入るかを確認できるようになったほうがいいわ どういう配列が入ってるのかも確認できずに中身取り出すとかそもそも間違ってる 一行ずつ実行しながらローカルウィンドウで確認すれば 例えばこんな感じで配列が作られるのが確認できる https://i.imgur.com/wDjGPTf.png
59 名前:デフォルトの名無しさん (アウアウカー Sac3-jwjG) [2020/06/29(月) 15:49:01 ID:T8IL5X90a.net] >>57 ありがとうございます 縦一行でも二次元配列というのになるんですね 基本的なことが分かっておらず、すみません >>58 こんなのがあったとは・・・ 活用させてもらいます、ありがとうございました
60 名前:デフォルトの名無しさん (ワッチョイ 3f01-bXJj) mailto:sage [2020/06/29(月) 15:52:32 ID:TB+oeC/70.net] 仮想COM使ってるバーコードリーダーからEasycomm使ってデータ読み取ろうとしたけどわからんかった その辺の知識身につけたいんだけどとっかかりが分からない 知識ある人がうらやましい
61 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 16:45:10.65 ID:6d9dL1u1a.net] >>60 セルに入力するだけなら USB接続のバーコードリーダーでピッピするだけ いったい何のデータ?
62 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 17:04:47.20 ID:TB+oeC/70.net] >>61 いわゆるキーボードモード(USB HID)になってるようなバーコードリーダーならそうなんだけどね 今使ってるのは仮想COM(USB COM)の設定になってて、HIDに切り替えようとするとPC再起動 しないといけなかったり、何かと面倒なんだわ COMモードじゃないとシステムに入力出来なかったりするものもあるしね 勝手にやっちゃうと職場の他の人に迷惑かけるし そこでなんとかCOMモードのままでHID的にエクセルに出力できないかなって。 NW7のバーコード読取り結果を出力させたいってだけなんだけど、うまくいかなかった
63 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 17:16:51.22 ID:6d9dL1u1a.net] 基幹システムとExcelが分離してるなら キーボードを別のキーボードにするだけの事だから 数千円でUSBバーコードリーダー買ってきてぶっ刺した方が早そう
64 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 17:27:14.16 ID:TB+oeC/70.net] おっしゃる通りなんだけど そこに立ちはだかる「セキュリティ?」の壁なんだわ 特にハードは目に見える分、よく分かってないお偉いさんでも口挟んでくる おれ超末端だからハード新規導入は無理だ ソフトは誤魔化せるんでこっちから攻めたかった
65 名前:デフォルトの名無しさん [2020/06/29(月) 17:37:54.02 ID:6d9dL1u1a.net] それ、どっちがセキュアなんだかw SD120(バーコードリーダー)を仮想シリアル通信で利用する https://kagamikarasu.net/sd120_barcodereader_serial/ >これでプログラムに組み込むのが容易になるかと思います。 その先は知らん!
66 名前:デフォルトの名無しさん (ワッチョイ cfda-NJGG) mailto:sage [2020/06/29(月) 17:47:36 ID:pfpn6QaF0.net] >>64 上司に黙ってソフト変更とかするほうがセキュリティー的にNGだろ
67 名前:デフォルトの名無しさん (オッペケ Sra3-G+5W) mailto:sage [2020/06/29(月) 17:50:11 ID:j9Yq0PlQr.net] 業務時間も資産も使うんだし相談なり申請なりはしとけよ
68 名前:デフォルトの名無しさん (ワッチョイ 3f01-bXJj) mailto:sage [2020/06/29(月) 17:50:20 ID:TB+oeC/70.net] ちょ、そこで終わられても
69 名前:デフォルトの名無しさん (ワッチョイ cfda-NJGG) mailto:sage [2020/06/29(月) 18:01:00 ID:pfpn6QaF0.net] うまくいかないって具体的なエラーや表示もないし どこまでできて何ができないか書いてないよね
70 名前:デフォルトの名無しさん (ワッチョイ 3f01-bXJj) mailto:sage [2020/06/29(月) 18:11:42 ID:TB+oeC/70.net] セキュリティー的にはな、 でもうちのは「セキュリティ?」だから >>69 一応何らかのデータは取得できてて、不正確な数字やらスペースやらは羅列される まぁそもそも仕組み分からず動かしてる段階で自分としては納得出来てないんで その辺を学習できるとっかかりが見つかればと思って書いてみただけ 心当たりなければいいよ いそぐものでもないし課題の1つとして気長に取り組んでみるわ
71 名前:デフォルトの名無しさん [2020/06/29(月) 18:19:31.08 ID:6uUvaw7SM.net] 関係ないけどcomってコミュニケーションのCOMでいいんだっけ? 昔 .com をカンパニーだと思ってたワシ
72 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 18:42:30.00 ID:6d9dL1u1a.net] >>70 データ変換はこのスレの範疇なようなスレチの様な 1次元のいわゆる白黒バーコードはバイナリだから https://ja.m.wikipedia.org/wiki/シリアルポート とキーエンスのバーコード講座NW7 https://www.keyence.co.jp/ss/products/autoid/codereader/basic-nw7.jsp でもお勉強しないとわかりません。
73 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 18:57:10.02 ID:2GVfwDQBr.net] >>70 通信パラメタ(とくにbps)は合わせたのか? とりあえずシリアル通信についてちゃんと勉強してからやれ
74 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 19:27:50.46 ID:TB+oeC/70.net] >>72 さんきゅ 目通してみる >>73 パラメータはバーコードリーダのマニュアルに載ってたんでそれ使った 最後に試したのが1年ぐらい前なんで そのうちまたやってみるわ ほんとはバーコードリーダを家に持ち帰れればいろいろ実験できるんだけどなぁ 職場のPCだと手荒な実験できないんで捗らない
75 名前:デフォルトの名無しさん (アウアウエー Sabf-PKxn) mailto:sage [2020/06/29(月) 19:33:50 ID:6d9dL1u1a.net] >>74 同じ品番のバーコードリーダーを買いましょうw
76 名前:デフォルトの名無しさん (ワッチョイ cfda-NJGG) mailto:sage [2020/06/29(月) 19:40:44 ID:pfpn6QaF0.net] なんでわざわざコンプライアンスを破ろうとするのかわからん
77 名前:デフォルトの名無しさん (スップ Sddf-uLB2) mailto:sage [2020/06/29(月) 20:58:53 ID:p0BvfhePd.net] >>70 昔、そういうハードのサポートしてた。 POS関連でバーコ―ドリーダー、レシートプリンタ、何とかディスプレイ(金額表示)、キャッシュドロワーとか。 シリアルならフロー制御がどうなってるかとか含めて、ちゃんと設定しないとダメだぞ。
78 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 22:23:41.83 ID:R8I/2vyw0.net] ユーザーフォームに元に戻すボタンを作ろうと 奮闘中 ・ブックやシート、列行の削除や挿入などはやらない ・セル内の数値同士の計算などをやらせる 基本的に無理だから*2のに対しては/2のボタン とか逆を割り当てていこうかと思ったら四捨五入で座礁しますた 記録して元に復元させるってやり方かぁ ムズそうすぎてちょっとあきらめてる 使用者には間違えるなと言うしかないか…
79 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 22:35:48.51 ID:6d9dL1u1a.net] >>78 間違えるないうようなユーザーフォームな時点でな ロジカルなシンキングな出来てないな
80 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 22:40:32.32 ID:R8I/2vyw0.net] >>79 ユーザーフォームのボタンの配置とか割り当てとかタブ分けとか悪戦苦闘してる そこらへんのセンスがないんだよぁ
81 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 22:44:33.56 ID:9POaIpQ1a.net] >>80 作業を分けてフローチャートを紙に書いてみた方が良いよ 頭の中の整理できるから
82 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 22:50:58.30 ID:R8I/2vyw0.net] 一応タブ分けしてみた 一番左はデータを指定したシートに全部読み込む 次のタブで選択セル±の反転をさせる 最初はabsで絶対値にすればいいかと思ったけどマイナス値が必要な数値があったため*-1で その次のタブで四捨五入 選択セルを0.00まで四捨五入するボタンと 0.0まで四捨五入するボタン 最後のタブで選択セル-A列にある数値の 引き算をさせるボタン なんか工程毎にタブ分けしてみたけど 慣れないとみんな使いにくそう なかなかなぁ
83 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 23:04:34.75 ID:SxZPiP67a.net] >>82 作業工程ごとに選択肢が複数あって それぞれに元に戻すボタンをつけるの? 囲碁や将棋ソフトじゃないんだからさ しかも完成しても使いにくいとか 考えたくないくらいめんどくせー、わし降りた。
84 名前:デフォルトの名無しさん (ワッチョイ 3fb5-jCQM) mailto:sage [2020/06/29(月) 23:31:00 ID:R8I/2vyw0.net] >>83 そうなんよ、±反転はまぁいいとして 四捨五入と最後のまとめ計算がなぁ…と
85 名前:デフォルトの名無しさん (ワッチョイ 0fda-H7K1) mailto:sage [2020/06/29(月) 23:34:38 ID:PVh3udJT0.net] 操作する前に、シートをコピーして非表示にしとけば 戻すボタンでコピーしておいたシートに差し替えて戻すw
86 名前:デフォルトの名無しさん (ワッチョイ cfda-NJGG) mailto:sage [2020/06/30(火) 00:16:48 ID:HFjntDoM0.net] 間違えることくらいあるだろう 人間だもの
87 名前:デフォルトの名無しさん (アウアウエー Sabf-PKxn) [2020/06/30(火) 00:22:19 ID:l6PnVpoXa.net] >>84 タブじゃなくてWordの葉書作成ウィザードみたいにしたらどうかな アプリのインストールみたいに 順番に選択肢や入力欄があって 下にボタンで進んで行くイメージ[<<戻る][次へ>>][完了]
88 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 08:45:53.97 ID:LUNyPqILd.net] >>84 根本的な考え方が違う。 フォームの内容を全部ユーザー定義かクラスに持たせて、そこ経由で動作させるようにする。 何かの動作はユーザー定義を元に動作させ、ユーザー定義をフォームに読み込むようにすれば簡単だ。
89 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 17:46:29.02 ID:HFjntDoM0.net] 普段からそういうの慣れてる人ならできるだろうが初心者に言っても無理だろ
90 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 18:08:03.74 ID:ulIgP7Tu0.net] >>87 ありがとう、かなり見やすくかるかも そのやり方でも作ってみるよ >>88 ごめん、全く理解できん素人なので 教えてとは言えないからもう少しだけわかりやすく言ってもらえると でも導入は厳しそうかなぁ
91 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 18:34:02.50 ID:iUIa6Vpk0.net] 配列の勉強中です 1行目にタイトルが入っていて、2行目以降に値が入っているシートで、C列に"年"、D列に"月"、E列に"日"が入っています。 そこで、同じ行のA列にC〜Eの値を結合して「年/月/日」の表示にしたいのですが、配列を使うにはどう書けばいいでしょうか? Sub Test() Dim i As Long Dim LastRow As Long LastRow = Cells(Rows.Count, 2).End(xlUp).Row ReDim MyArray(LastRow - 2, 3) As Variant ReDim DayArray(LastRow - 2) As Variant MyArray = Range("C2:E" & LastRow) For i = 0 To LastRow - 2 DayArray(i) = MyArray(i, 1) & "/" & MyArray(i, 2) & "/" & MyArray(i, 3) Next i Range("A2:A" & LastRow) = DayArray End Sub
92 名前:デフォルトの名無しさん [2020/06/30(火) 18:39:14.24 ID:Z3NkR/bn0.net] 数式張り付けろや
93 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 18:47:22.61 ID:x94da/wE0.net] >>91 代入先がLastRow-1行1列の2次元なら配列もそうせんと
94 名前:91 mailto:sage [2020/06/30(火) 19:05:07.51 ID:iUIa6Vpk0.net] >>93 すみません。書き方を教えてください
95 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 19:24:15.34 ID:x94da/wE0.net] >>94 何の書き方?配列サイズを代入先セル範囲の行数と列数分用意するだけだぞ
96 名前:91 (ワッチョイ cfcc-pPzt) mailto:sage [2020/06/30(火) 19:40:39 ID:iUIa6Vpk0.net] ↓ですか? "インデックスが有効範囲にありません"のエラーがでます Dim i As Long Dim LastRow As Long LastRow = Cells(Rows.Count, 2).End(xlUp).Row ReDim MyArray(LastRow - 2, 3) As Variant ReDim DayArray(LastRow - 2, 1) As Variant MyArray = Range("C2:E" & LastRow) For i = 0 To LastRow - 2 DayArray(i, 1) = MyArray(i, 1) & "/" & MyArray(i, 2) & "/" & MyArray(i, 3) Next i Range("A2:A" & LastRow) = DayArray
97 名前:デフォルトの名無しさん (ワッチョイ fff7-pPzt) mailto:sage [2020/06/30(火) 19:42:59 ID:s83lPCQk0.net] 配列数クソめんどいからこれでいいよ Sub test() Dim endRow As Long endRow = ActiveSheet.UsedRange.Rows.Count Dim ary As Variant ary = Range(Cells(1, 1), Cells(endRow, 5)).Value Dim i As Long For i = 1 To endRow Step 1 ary(i, 1) = VBA.DateSerial(ary(i, 3), ary(i, 4), ary(i, 5)) Next i Range(Cells(1, 1), Cells(endRow, 1)).Value = ary End Sub
98 名前:デフォルトの名無しさん (ワッチョイ fff7-pPzt) mailto:sage [2020/06/30(火) 19:47:07 ID:s83lPCQk0.net] range.valueからできる二次元配列の開始番号は0ではなく、1ですねえ
99 名前:91 mailto:sage [2020/06/30(火) 20:10:45.24 ID:iUIa6Vpk0.net] >>95 ,97,98 動きました!ありがとうございます。
100 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 20:21:46.34 ID:h7LW9tmr0.net] 0番目のセルは無いのに0番目の配列要素はあるから面倒臭いよな
101 名前:デフォルトの名無しさん (ワッチョイ 4f7c-H7K1) mailto:sage [2020/06/30(火) 20:28:40 ID:x94da/wE0.net] 場合によってはoffset(i)にすればよい