[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2ch.scのread.cgiへ]
Update time : 07/24 13:47 / Filesize : 158 KB / Number-of Response : 580
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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

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)にすればよい






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<158KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef