Excel VBA 質問スレ Part67at TECH
Excel VBA 質問スレ Part67 - 暇つぶし2ch2:デフォルトの名無しさん
20/06/26 07:58:40.55 PIx3bjtD0.net
>>1
おちゅ

3:デフォルトの名無しさん
20/06/26 19:07:55.93 ZjxMZdyJ0.net
VBAでgrep検索を使いたいんだが教えてくれ。
URLリンク(website-note.net)
上のサイトのコードをコピペして動くまではいいんだけど、もう一つ条件を加えて
'キーワードを含むセルの情報をアウトプット時にキーワードの右のセルをアウトプットさせるようにしたい。
そこで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:デフォルトの名無しさん
20/06/26 20:08:11.16 SBXE4EMs0.net
・OpB1って何ですか?丁寧に書いて
・せめてoutputCellInfoのソースは全部書いて
・=thenがガチなのかタイポなのか分からんから直打ちじゃなくてコピペして

5:デフォルトの名無しさん
20/06/26 20:20:30.07 PIx3bjtD0.net
日本語訳:
上のサイトのコードだと
キーワードを含むセルの値が、G列に出力されます。
これを以下のように変更したいです
キーワードを含むセルを検索したあと、このセルの値だけでなく、このセルのすぐ右側のセルの値をH列に出力したいです。
できたら、オプションボタンを新設して、右側セルの値を出力するかしないかを選択できるようにしたいです


面倒だから後はお前らにまかせた

6:デフォルトの名無しさん
20/06/26 20:26:55.66 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)
20/06/26 20:40:26 nEhmFRZ4a.net
なんでElseに:ついてんだ?

8:デフォルトの名無しさん (アウアウウー Sad3-d3ZO)
20/06/26 20:40:29 1oZqQJala.net
張り付けたオプションボタンと定義したのは別物じゃね

9:デフォルトの名無しさん (ワッチョイ 3f01-bXJj)
20/06/26 20:50:43 PIx3bjtD0.net
つか、そもそもそのサイトのコードって正確に動く?
キーワードを含むセルを網羅しないんだけど

nothingになるRangeを比較対象に置いてるあたりがあれだ

10:デフォルトの名無しさん
20/06/26 21:05:20.01 ZjxMZdyJ0.net
Elseの:はミスです…
オプションボタンの定義…ググりなおします
>>9そうです、全文では無いんですよね…全文検索くんもDLして
編集しようとしましたが今の私では無理でした。

11:デフォルトの名無しさん
20/06/26 23:24:58.46 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:デフォルトの名無しさん
20/06/26 23:25:32.05 ZjxMZdyJ0.net
>>3です
無理やりですが自己解決しました
標準モジュール2にアウトプットのコードをさわったものをコピペして
コマンドボタンクリックしたときの動作をIfでCallするようにしたら出来ました
でもやっぱりこのコード重いですね。どうにか軽くする方法無いものですかね。

13:デフォルトの名無しさん
20/06/26 23:28:15.39 ZjxMZdyJ0.net
>>11修正ありがとうございます、提案されたやり方も試してみます!

14:デフォルトの名無しさん
20/06/26 23:49:56.02 kQH1YyZn0.net
配列にすれば
あとやってるかとは思うけど自動計算と画面更新オフ

15:デフォルトの名無しさん
20/06/26 23:53:39.92 ZjxMZdyJ0.net
すみません、配列にするとはどういうことをすることですか?

16:デフォルトの名無しさん
20/06/27 00:17:07.69 KqbSykww0.net
Cells(1, 1).Value = "あ"
Cells(1, 2).Value = "い"
Cells(1, 3).Value = "う"
  ↓ ↓ ↓
Range("A1:C1").Value = Array("あ", "い", "う")
1個ずつじゃなくて、一気に放り込めってことでしょう。>>15

17:デフォルトの名無しさん
20/06/27 02:29:31.12 gCUCp3Nd0.net
そこを高速化してもしかたないのでは・・・

18:デフォルトの名無しさん
20/06/27 05:22:36.02 J5vHObt/0.net
他人にコード書かせて動かしたら遅いと文句言うのって人としてどうなの?

19:デフォルトの名無しさん
20/06/27 08:53:12.31 9qJBLgyD0.net
>>

20:デフォルトの名無しさん
20/06/27 09:24:13.86 YKskLwzM0.net
<<

21:デフォルトの名無しさん
20/06/27 09:43:15.25 wwwZDyDia.net
ビットシフトとは各桁を 1 桁左や右にずらすことです。
URLリンク(www.tipsfound.com)
VBA にはそのような演算子はありませんが次のようにしてできます。
\ (2 ^ 1) ' 1 桁右へシフト
* (2 ^ 1) ' 1 桁左へシフト

22:デフォルトの名無しさん
20/06/27 10:06:21.20 lV2RRwzl0.net
実行時エラー '6':
オーバーフローしました。

23:デフォルトの名無しさん
20/06/27 10:49:37.32 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:デフォルトの名無しさん
20/06/27 10:55:33.95 gKvpRzl30.net
今日は、タイマー作ってます。
MsgBox 36000*24
はエラーにならないが
MsgBox 24*3600
は実行時エラーオーバーフローしました。
となります。
どうしてなんでしょうか?。

25:デフォルトの名無しさん
20/06/27 11:02:47.04 aTkq7ke+a.net
>>23
教えてキャン>>98<<ビー
URLリンク(oshiete.goo.ne.jp)
>Win98系のOSの場合ですが、処理中に、
頻繁にDoEventsを実行する必要があります。
 これは、OSの特性です。

26:デフォルトの名無しさん
20/06/27 11:13:07.90 lV2RRwzl0.net
釣りなのか本気なのか判断に困る質問だな

27:デフォルトの名無しさん
20/06/27 11:48:36.47 P+1UXm0n0.net
ヤベーイ

28:デフォルトの名無しさん
20/06/27 23:20:44.51 J5vHObt/0.net
動作がおかしいのは古いからじゃないかな

29:デフォルトの名無しさん
20/06/28 00:22:47.53 /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)
20/06/28 07:42:30 sqW+tWgm0.net
>>29
へー面白いね

31:デフォルトの名無しさん (ワッチョイ 3f7f-nmuj)
20/06/28 07:45:50 /E8O58u/0.net
プロジェクトウィンドウが何かの表紙に名前順にソートされてしまったんですが、標準モジュール、クラスモジュール等の階層表示ってどうやって戻すのでしょうか

32:デフォルトの名無しさん
20/06/28 08:01:52.55 8pre44tM0.net
フォルダーの切り替え(黄色いフォルダの絵のアイコン) をクリック

33:デフォルトの名無しさん
20/06/28 11:43:32.56 VHBre49Bd.net
>>30
結構、常識だよ。
こういうエラーの時に真っ先に考える。
覚えておくと良い。
詳しく覚えなくても、勝手に型判定のせいかなと考えるだけで全然違う。

34:デフォルトの名無しさん
20/06/28 12:14:58.87 dFUOn9oJ0.net
適当なこと言っててワロタ

35:デフォルトの名無しさん
20/06/28 13:50:31.47 Gnbk8j2I0.net
>>34
何が適当なんだ?
言語仕様の基本だろう
>>33に俺を言うべき

36:デフォルトの名無しさん
20/06/28 13:50:52.16 Gnbk8j2I0.net
俺ではなくお礼

37:デフォルトの名無しさん
20/06/28 14:21:14.54 t+bqi6uL0.net


38:デフォルトの名無しさん (ワッチョイ 8ff1-of6p)
20/06/28 14:41:16 O22xrl4H0.net
>>33


39:デフォルトの名無しさん
20/06/28 15:17:28.32 IDO0V0ZPa.net
dim 俺 as string

40:デフォルトの名無しさん
20/06/28 16:12:05.93 WMjrpZfvF.net
俺 = "童貞"

41:デフォルトの名無しさん
20/06/28 16:56:51.40 69pcuKP2M.net
Const 俺 As String = "童貞"

42:デフォルトの名無しさん
20/06/28 17:02:14.70 YhC9oGcZa.net
Do While 俺
俺 = 1
If 俺 > 1 Then
Exit Do
End If
Loop
MsgBox "happy"

43:デフォルトの名無しさん
20/06/28 17:20:31.84 dFUOn9oJ0.net
>>35
式の中で最初に出てきた数字によって型が勝手に決められる → 嘘
32767以下の整数はInteger型 → 嘘
24& * 3600 (Double型) → 嘘
24# * 3600 (Long型) → 嘘
これで適当以外の何なんだよ

44:23 (ファミワイ FFb3-pKDl)
20/06/28 17:53:16 n2mRaag0F.net
Timerに1000を掛けて見ても何か変だと思ったら
想定より早くIeTimerが実行される時があるみたいだ。

マシンの性能が良すぎるんですかね。
取り敢えず+200にして解決としときます。

MsgBoxの方は型とか考えたくないので
兎に角勉強になりました。 ありがとうございました。

45:デフォルトの名無しさん
20/06/28 19:11:04.99 LbQBFJ/O0.net
>>24
MsgBox 24 * 3600   
MsgBox 24 * 36000
1行目はオーバーフローがでる
2行目はエラーが出ないで普通に計算されます

46:デフォルトの名無しさん
20/06/28 19:21:56.72 nTfCGwDP0.net
特定のフォルダ内のファイルのファイル名を変えて、ついでにプロパティのコメントにも文字を入力したいです
for each f in fol.files
  f.name=ファイル名
  f.comment=コメント
next
みたいな感じでやりたいんですが、f.commentではだめなようです
どう書けばいいか教えてください

47:デフォルトの名無しさん
20/06/28 19:23:35.13 LbQBFJ/O0.net
Integer型 * Integer型 の計算結果が 32767を超えるとオーバーフローエラーがでる
Integer型 * Long型 の計算結果が 32767を超えてもエラーにならない
ってことじゃね

48:デフォルトの名無しさん
20/06/28 19:28:31.58 Vk36drdU0.net
win10でRS-232C使うとかなりの確率で
Set MSComm1 = New MSComm 
のところでエラーになります
どうにかなりませんか

49:デフォルトの名無しさん
20/06/28 19:52:40.03 LbQBFJ/O0.net
>>48
EasyComm ってのに変えたほうがいいかも

50:デフォルトの名無しさん
20/06/28 20:30:15.72 LbQBFJ/O0.net
>>46
変更後のファイル名が重複するんじゃね

51:デフォルトの名無しさん
20/06/28 20:32:56.52 LbQBFJ/O0.net
>>46
あとファイルの種類によってはコメントが無いのもある

52:デフォルトの名無しさん
20/06/28 20:35:06.31 +IGHtKO4a.net
イジカミジゴー

53:デフォルトの名無しさん
20/06/28 20:39:46.50 yfJkjLDvM.net
>>48
Win32API直叩きしたら?
自分で全部管理できるし、枯れた技術で安定してる

54:デフォルトの名無しさん
20/06/28 21:16:46.93 yxdrwHPGa.net
>>52
B'z乙

55:デフォルトの名無しさん (アウアウウー Sad3-d3ZO)
20/06/29 10:38:25 2N59jCILa.net
excel標準でmscommの開発用のライセンス無いよね?

56:デフォルトの名無しさん (アウアウカー Sac3-jwjG)
20/06/29 13:58:37 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:デフォルトの名無しさん
20/06/29 14:21:14.85 81b3XCdqM.net
二次元配列を一つずつ取り出すときはArray(上からの番号,1)
空白行までのコピーは
with worksheets(1)
.Range(.Cells(1,3) ,.Cells(1,3).End(xldown)).copy
end with

58:デフォルトの名無しさん
20/06/29 15:29:59.45 TB+oeC/70.net
どういう配列が作られたのかがそもそもわかんないって話でしょ?
デバッグの仕方覚えて、Arrayに何が入るかを確認できるようになったほうがいいわ
どういう配列が入ってるのかも確認できずに中身取り出すとかそもそも間違ってる
一行ずつ実行しながらローカルウィンドウで確認すれば
例えばこんな感じで配列が作られるのが確認できる
URLリンク(i.imgur.com)

59:デフォルトの名無しさん (アウアウカー Sac3-jwjG)
20/06/29 15:49:01 T8IL5X90a.net
>>57
ありがとうございます
縦一行でも二次元配列というのになるんですね
基本的なことが分かっておらず、すみません

>>58
こんなのがあったとは・・・
活用させてもらいます、ありがとうございました

60:デフォルトの名無しさん (ワッチョイ 3f01-bXJj)
20/06/29 15:52:32 TB+oeC/70.net
仮想COM使ってるバーコードリーダーからEasycomm使ってデータ読み取ろうとしたけどわからんかった
その辺の知識身につけたいんだけどとっかかりが分からない
知識ある人がうらやましい

61:デフォルトの名無しさん
20/06/29 16:45:10.65 6d9dL1u1a.net
>>60
セルに入力するだけなら
USB接続のバーコードリーダーでピッピするだけ
いったい何のデータ?

62:デフォルトの名無しさん
20/06/29 17:04:47.20 TB+oeC/70.net
>>61
いわゆるキーボードモード(USB HID)になってるようなバーコードリーダーならそうなんだけどね
今使ってるのは仮想COM(USB COM)の設定になってて、HIDに切り替えようとするとPC再起動
しないといけなかったり、何かと面倒なんだわ
COMモードじゃないとシステムに入力出来なかったりするものもあるしね
勝手にやっちゃうと職場の他の人に迷惑かけるし
そこでなんとかCOMモードのままでHID的にエクセルに出力できないかなって。
NW7のバーコード読取り結果を出力させたいってだけなんだけど、うまくいかなかった

63:デフォルトの名無しさん
20/06/29 17:16:51.22 6d9dL1u1a.net
基幹システムとExcelが分離してるなら
キーボードを別のキーボードにするだけの事だから
数千円でUSBバーコードリーダー買ってきてぶっ刺した方が早そう

64:デフォルトの名無しさん
20/06/29 17:27:14.16 TB+oeC/70.net
おっしゃる通りなんだけど
そこに立ちはだかる「セキュリティ?」の壁なんだわ
特にハードは目に見える分、よく分かってないお偉いさんでも口挟んでくる
おれ超末端だからハード新規導入は無理だ
ソフトは誤魔化せるんでこっちから攻めたかった

65:デフォルトの名無しさん
20/06/29 17:37:54.02 6d9dL1u1a.net
それ、どっちがセキュアなんだかw
SD120(バーコードリーダー)を仮想シリアル通信で利用する
URLリンク(kagamikarasu.net)
>これでプログラムに組み込むのが容易になるかと思います。
その先は知らん!

66:デフォルトの名無しさん (ワッチョイ cfda-NJGG)
20/06/29 17:47:36 pfpn6QaF0.net
>>64
上司に黙ってソフト変更とかするほうがセキュリティー的にNGだろ

67:デフォルトの名無しさん (オッペケ Sra3-G+5W)
20/06/29 17:50:11 j9Yq0PlQr.net
業務時間も資産も使うんだし相談なり申請なりはしとけよ

68:デフォルトの名無しさん (ワッチョイ 3f01-bXJj)
20/06/29 17:50:20 TB+oeC/70.net
ちょ、そこで終わられても

69:デフォルトの名無しさん (ワッチョイ cfda-NJGG)
20/06/29 18:01:00 pfpn6QaF0.net
うまくいかないって具体的なエラーや表示もないし
どこまでできて何ができないか書いてないよね

70:デフォルトの名無しさん (ワッチョイ 3f01-bXJj)
20/06/29 18:11:42 TB+oeC/70.net
セキュリティー的にはな、
でもうちのは「セキュリティ?」だから
>>69
一応何らかのデータは取得できてて、不正確な数字やらスペースやらは羅列される
まぁそもそも仕組み分からず動かしてる段階で自分としては納得出来てないんで
その辺を学習できるとっかかりが見つかればと思って書いてみただけ
心当たりなければいいよ
いそぐものでもないし課題の1つとして気長に取り組んでみるわ

71:デフォルトの名無しさん
20/06/29 18:19:31.08 6uUvaw7SM.net
関係ないけどcomってコミュニケーションのCOMでいいんだっけ?
昔 .com をカンパニーだと思ってたワシ

72:デフォルトの名無しさん
20/06/29 18:42:30.00 6d9dL1u1a.net
>>70
データ変換はこのスレの範疇なようなスレチの様な
1次元のいわゆる白黒バーコードはバイナリだから
URLリンク(ja.m.wikipedia.org)シリアルポート
とキーエンスのバーコード講座NW7
URLリンク(www.keyence.co.jp)
でもお勉強しないとわかりません。

73:デフォルトの名無しさん
20/06/29 18:57:10.02 2GVfwDQBr.net
>>70
通信パラメタ(とくにbps)は合わせたのか?
とりあえずシリアル通信についてちゃんと勉強してからやれ

74:デフォルトの名無しさん
20/06/29 19:27:50.46 TB+oeC/70.net
>>72
さんきゅ
目通してみる
>>73
パラメータはバーコードリーダのマニュアルに載ってたんでそれ使った
最後に試したのが1年ぐらい前なんで
そのうちまたやってみるわ
ほんとはバーコードリーダを家に持ち帰れればいろいろ実験できるんだけどなぁ
職場のPCだと手荒な実験できないんで捗らない

75:デフォルトの名無しさん (アウアウエー Sabf-PKxn)
20/06/29 19:33:50 6d9dL1u1a.net
>>74
同じ品番のバーコードリーダーを買いましょうw

76:デフォルトの名無しさん (ワッチョイ cfda-NJGG)
20/06/29 19:40:44 pfpn6QaF0.net
なんでわざわざコンプライアンスを破ろうとするのかわからん

77:デフォルトの名無しさん (スップ Sddf-uLB2)
20/06/29 20:58:53 p0BvfhePd.net
>>70
昔、そういうハードのサポートしてた。
POS関連でバーコ―ドリーダー、レシートプリンタ、何とかディスプレイ(金額表示)、キャッシュドロワーとか。

シリアルならフロー制御がどうなってるかとか含めて、ちゃんと設定しないとダメだぞ。

78:デフォルトの名無しさん
20/06/29 22:23:41.83 R8I/2vyw0.net
ユーザーフォームに元に戻すボタンを作ろうと
奮闘中
・ブックやシート、列行の削除や挿入などはやらない
・セル内の数値同士の計算などをやらせる
基本的に無理だから*2のに対しては/2のボタン
とか逆を割り当てていこうかと思ったら四捨五入で座礁しますた
記録して元に復元させるってやり方かぁ
ムズそうすぎてちょっとあきらめてる
使用者には間違えるなと言うしかないか…

79:デフォルトの名無しさん
20/06/29 22:35:48.51 6d9dL1u1a.net
>>78
間違えるないうようなユーザーフォームな時点でな
ロジカルなシンキングな出来てないな

80:デフォルトの名無しさん
20/06/29 22:40:32.32 R8I/2vyw0.net
>>79
ユーザーフォームのボタンの配置とか割り当てとかタブ分けとか悪戦苦闘してる
そこらへんのセンスがないんだよぁ

81:デフォルトの名無しさん
20/06/29 22:44:33.56 9POaIpQ1a.net
>>80
作業を分けてフローチャートを紙に書いてみた方が良いよ
頭の中の整理できるから

82:デフォルトの名無しさん
20/06/29 22:50:58.30 R8I/2vyw0.net
一応タブ分けしてみた
一番左はデータを指定したシートに全部読み込む
次のタブで選択セル±の反転をさせる
最初はabsで絶対値にすればいいかと思ったけどマイナス値が必要な数値があったため*-1で
その次のタブで四捨五入
選択セルを0.00まで四捨五入するボタンと
0.0まで四捨五入するボタン
最後のタブで選択セル-A列にある数値の
引き算をさせるボタン
なんか工程毎にタブ分けしてみたけど
慣れないとみんな使いにくそう
なかなかなぁ

83:デフォルトの名無しさん
20/06/29 23:04:34.75 SxZPiP67a.net
>>82
作業工程ごとに選択肢が複数あって
それぞれに元に戻すボタンをつけるの?
囲碁や将棋ソフトじゃないんだからさ
しかも完成しても使いにくいとか
考えたくないくらいめんどくせー、わし降りた。

84:デフォルトの名無しさん (ワッチョイ 3fb5-jCQM)
20/06/29 23:31:00 R8I/2vyw0.net
>>83
そうなんよ、±反転はまぁいいとして
四捨五入と最後のまとめ計算がなぁ…と

85:デフォルトの名無しさん (ワッチョイ 0fda-H7K1)
20/06/29 23:34:38 PVh3udJT0.net
操作する前に、シートをコピーして非表示にしとけば
戻すボタンでコピーしておいたシートに差し替えて戻すw

86:デフォルトの名無しさん (ワッチョイ cfda-NJGG)
20/06/30 00:16:48 HFjntDoM0.net
間違えることくらいあるだろう
人間だもの

87:デフォルトの名無しさん (アウアウエー Sabf-PKxn)
20/06/30 00:22:19 l6PnVpoXa.net
>>84
タブじゃなくてWordの葉書作成ウィザードみたいにしたらどうかな
アプリのインストールみたいに
順番に選択肢や入力欄があって
下にボタンで進んで行くイメージ[<<戻る][次へ>>][完了]

88:デフォルトの名無しさん
20/06/30 08:45:53.97 LUNyPqILd.net
>>84
根本的な考え方が違う。
フォームの内容を全部ユーザー定義かクラスに持たせて、そこ経由で動作させるようにする。
何かの動作はユーザー定義を元に動作させ、ユーザー定義をフォームに読み込むようにすれば簡単だ。

89:デフォルトの名無しさん
20/06/30 17:46:29.02 HFjntDoM0.net
普段からそういうの慣れてる人ならできるだろうが初心者に言っても無理だろ

90:デフォルトの名無しさん
20/06/30 18:08:03.74 ulIgP7Tu0.net
>>87
ありがとう、かなり見やすくかるかも
そのやり方でも作ってみるよ
>>88
ごめん、全く理解できん素人なので
教えてとは言えないからもう少しだけわかりやすく言ってもらえると
でも導入は厳しそうかなぁ

91:デフォルトの名無しさん
20/06/30 18:34:02.50 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:デフォルトの名無しさん
20/06/30 18:39:14.24 Z3NkR/bn0.net
数式張り付けろや

93:デフォルトの名無しさん
20/06/30 18:47:22.61 x94da/wE0.net
>>91
代入先がLastRow-1行1列の2次元なら配列もそうせんと

94:91
20/06/30 19:05:07.51 iUIa6Vpk0.net
>>93
すみません。書き方を教えてください

95:デフォルトの名無しさん
20/06/30 19:24:15.34 x94da/wE0.net
>>94
何の書き方?配列サイズを代入先セル範囲の行数と列数分用意するだけだぞ

96:91 (ワッチョイ cfcc-pPzt)
20/06/30 19:40:39 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)
20/06/30 19:42:59 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)
20/06/30 19:47:07 s83lPCQk0.net
range.valueからできる二次元配列の開始番号は0ではなく、1ですねえ

99:91
20/06/30 20:10:45.24 iUIa6Vpk0.net
>>95,97,98
動きました!ありがとうございます。

100:デフォルトの名無しさん
20/06/30 20:21:46.34 h7LW9tmr0.net
0番目のセルは無いのに0番目の配列要素はあるから面倒臭いよな

101:デフォルトの名無しさん (ワッチョイ 4f7c-H7K1)
20/06/30 20:28:40 x94da/wE0.net
場合によってはoffset(i)にすればよい

102:91
20/06/30 20:44:53.74 iUIa6Vpk0.net
すみません勘違いをしていました。最終行の
「Range("A2:A" & LastRow) = DayArray」
だと、A列が2行目以降空欄になってしまいます。
「Range(Cells(2, 1), Cells(LastRow, 1)) = DayArray」
も同じでしたが、
For i = 2 To LastRow
Range("A" & i) = DayArray(i - 1, 1)
Next i
だと入りますが、できれば一括で置き換えたいので、正しい書き方を教えてください

103:デフォルトの名無しさん
20/06/30 20:53:49.15 x94da/wE0.net
>>102
入力先のセルは1列分なのにDayArrayは2列分あって2列目に年月日が入ってる
ReDimを見直せ

104:91 (ワッチョイ cfcc-pPzt)
20/06/30 21:20:49 iUIa6Vpk0.net
>>103

Forの処理をこれに変えたらできました。ありがとうございます

DayArray(i - 1, 0) = MyArray(i, 1) & "/" & MyArray(i, 2) & "/" & MyArray(i, 3)

105:デフォルトの名無しさん (スプッッ Sd5f-at/t)
20/06/30 21:53:25 5LSCXiWjd.net
ListView(lvw1、lvw2)を2つ用意して、それぞれに同じデータを同じ順番に追加した状態です。
矢印キーの上下でlvw1とlvw2の同行選択状態ってどうやってやるんですか?

106:デフォルトの名無しさん
20/06/30 22:01:34.74 3GBrKjbXa.net
>>105
1と2で同じ操作をやりたいなら、別プロシージャに切り分けて(関数化)それをそれぞれに処理する方がわかりやすい

107:デフォルトの名無しさん
20/06/30 22:14:31.69 x94da/wE0.net
>>105
keydownイベントで上下の時になんやかんやする

108:デフォルトの名無しさん (ワッチョイ 4f7c-H7K1)
20/06/30 22:19:33 x94da/wE0.net
操作に関わらず一緒でいいならchangeイベントで楽に済ませられるが…

109:デフォルトの名無しさん
20/06/30 22:39:03.05 ulIgP7Tu0.net
Sub 四捨五入()
Dim PP As Range
Dim SELU As Range Set PP = Selection.EntireRow Set PP = Intersect(PP, Range("G:AE")) If WorksheetFunction.Count(PP) = 0 Then Exit Sub Set PP = PP.SpecialCells(xlCellTypeConstants, xlNumbers) For Each SELU In PP SELU = Round(SELU, 2) SELU.NumberFormatLocal = "0.00;-0.00;0" Next SELU End Sub
昨日の俺です
こんな感じで四捨五入をしてる
やはり記録するかコピーしといて間違えたら戻す作戦かなあ

110:デフォルトの名無しさん
20/06/30 22:56:39.68 RrxBtxCBr.net
A列とB列にXYデータが書かれているファイルがある
このファイルが複数あり、データを縦にくっつけてひとつのファイルにする方法をお願い致します。

111:デフォルトの名無しさん (ドコグロ MMc3-qQym)
20/06/30 23:33:01 ayj87xxdM.net
>>110
「vba 別のブック間 コピー」でググればそれなりの答えのサイトは出てくるよ

112:デフォルトの名無しさん
20/07/01 16:24:36.34 /ZTplk5x0.net
グラフの列の範囲を1つ進めて、範囲が変わったグラフを眺めてまた次の範囲を選択するマクロにしたいのですが、うまくいきません。
sleepで5秒待機するループにすると、マクロが終わるまでグラフはそのままです。
何か良い方法はありますか?

113:デフォルトの名無しさん
20/07/01 16:38:43.05 ufrQ+5Zi0.net
新しい表示にしてから待機したらいいんでないの

114:デフォルトの名無しさん (ワッチョイ 1ecc-VQSO)
20/07/01 17:00:30 JVz0cdM50.net
DoEvents

115:デフォルトの名無しさん (ワッチョイ 3a33-h2ht)
20/07/01 17:01:38 wdJg4V2k0.net
眺め終わったら自分でボタン押す仕様にすればいい

116:デフォルトの名無しさん
20/07/01 18:02:59.35 cdm/n45Wa.net
眺めるってw

117:デフォルトの名無しさん
20/07/01 18:14:23.56 BGy1oUher.net
A列に上から1万個くらいのデータがある。
ある値以下なら行全体削除、上詰めにするマクロをお願い致します。

ググってもまとをえたのがなく困ってます。

118:デフォルトの名無しさん
20/07/01 18:21:37.82 ufrQ+5Zi0.net
>>117
作業列作ってある値以下なら1立てる→1でオートフィルタ→行削除

119:デフォルトの名無しさん
20/07/01 18:24:14.85 g4YauoQu0.net
>>117
どうせ暇なんだろ、1万くらい手作業でやれよ

120:デフォルトの名無しさん
20/07/01 18:24:43.29 v2a99oiHF.net
>>117
範囲をテーブルにする
条件に当てはまる行のa列から、データの入ってる最終列までClearContents
で、テーブルをある列基準に並び替え

121:デフォルトの名無しさん
20/07/01 18:34:27.89 5XfsDMDI0.net
wordをcomで操作しているんですが、基本的にcomは
同期処理できないんですか?
たとえば、よくあるprintout(wordVBAの)~Set wordApp = Nothing
の流れなんかは、Application.Waitを入れないと印刷される前に
終わってしまいます。

122:デフォルトの名無しさん
20/07/01 18:38:53.74 34UZRJ820.net
>>117
dim r as long
dim was as excel.worksheet
set we=activesheet
Do while r>0
if ws.cells(r,”A”)<ある値 then
ws.rows(r).delete shift:=xlup
else
r=r-1
end if
loop
パフォーマンスは知らん

123:デフォルトの名無しさん
20/07/01 19:21:24.82 g4YauoQu0.net
そして動かないとか言ってくる初心者

124:デフォルトの名無しさん (ワッチョイ 8f5f-ewff)
20/07/01 19:44:41 l3YNJLMh0.net
deleteは重いわ誤作動起こしやすいわいいことないよな

125:デフォルトの名無しさん
20/07/01 19:59:04.37 fKGbFrld0.net
誤作動なんて起こすの?
単にセル番号計算ミスしたスクリプト書くだけなら理解できるけど、誤作動なんてあったら使えないな

126:デフォルトの名無しさん
20/07/01 20:06:30.76 Tir3cVcXa.net
フィルターかけてカレントリージョンでコピーして新規シートに貼り付けが良さそう

127:デフォルトの名無しさん
20/07/01 21:01:32.84 v34eJavmM.net
>>122
(r,”A”)<ある値
顔文字に見えたわw

128:デフォルトの名無しさん
20/07/01 21:43:01.53 H9TCgnXe0.net
Webで見たぐらいの初心者なのですが
書式設定の複数1行列を色変える作業が
200回ほどやらなきゃいけなく
マクロ組んでみようかと頑張ったのですが
上手くいきません
Dim a As Integer
Dim row1 As Integer
row1 = 3
For a = 0 To 200
Columns("row1 + a , P + a").Select
Selection.Format Conditions.以下略
Selection.Format Conditions以下略
With Selection.略
Selection略
Selection略
Selection略
End With
Next a
row1を無くしてb=3
これをColumnsをRange(b+a,b+a)
で出来ますでしょうか?
Rangeの指定カッコ内では数式を入れられないとかありますか?

129:デフォルトの名無しさん
20/07/01 22:17:29.48 H9TCgnXe0.net
Range(cells(a,1),cells(a,16)).Select
でやってみます

130:デフォルトの名無しさん
20/07/01 22:45:11.71 xxJ42X4qa.net
何故初心者はSelectしたがるのか

131:デフォルトの名無しさん
20/07/01 23:36:22.71 yn1qRX7nM.net
>>35
>>130
マクロの記録がその手のコードを生成するからでしょ

132:デフォルトの名無しさん (ワッチョイ 87da-z1wt)
20/07/02 01:40:39 Y/spJvDG0.net
条件付き書式とかは?

133:デフォルトの名無しさん
20/07/02 02:34:51.75 G8g1bCvWr.net
このメニューで、空白セルにチェック入れると空白セルを選択しますね。
では例えば値が100以上など、条件つきのセルを選ぶ事はできますか?
URLリンク(i.imgur.com)

134:デフォルトの名無しさん
20/07/02 04:05:38.32 vmiMC9VK0.net
教えてください。
imagemsoの名称からfaceidに変換することは可能でしょうか?
もしくはmsoBarPopupでimagemsoを使用することは可能でしょうか?

135:デフォルトの名無しさん
20/07/02 06:28:30.74 PEAIWqln0.net
>>133
選んだセルをどうしたいかによるけど、オートフィルかけて選択とか

136:デフォルトの名無しさん
20/07/02 08:20:19.52 yX39WODNa.net
他人の作ったコードはなぜ読む気がしないのか

137:デフォルトの名無しさん
20/07/02 10:30:47.89 KAImZ3Owa.net
読む必要はないからな

138:デフォルトの名無しさん (ワッチョイ 1e8e-0gyK)
20/07/02 12:31:17 cWLbwDw40.net
馬鹿の特徴

「教えて」「助けて」

で始まる書き込みをする

139:デフォルトの名無しさん
20/07/02 13:06:37.09 vmiMC9VK0.net
>>138
馬鹿でもいいです。
じゃあ、模範的な質問の仕方を教えてください。

140:デフォルトの名無しさん
20/07/02 15:30:35.30 NxUusdo6a.net
そんなものはない

141:デフォルトの名無しさん
20/07/02 16:07:39.62 fLeksvw30.net
>>140
ありがとうごさいました。参考になります。

142:デフォルトの名無しさん
20/07/02 16:13:40.59 pSHiLlcA0.net
馬鹿の特徴
人にマウントしたがるだけで
質問への答えは出さない

143:デフォルトの名無しさん
20/07/02 17:04:38.40 2Xt/GnSW0.net
>>142
馬鹿でもいいです。
じゃあ、模範的な回答の仕方を教えてください。

144:デフォルトの名無しさん
20/07/02 17:44:48.44 Q59tEF0c0.net
そんなものはない

145:デフォルトの名無しさん
20/07/02 17:45:12.17 q3lU8bAMa.net
そんなひとはいない

146:デフォルトの名無しさん
20/07/02 21:22:15.18 sbstkRF+M.net
馬鹿には馬鹿と指摘しないと、あまりに低レベルの自分でやってみようという意志もない馬鹿な質問で溢れかえるからこれくらいでいい

147:デフォルトの名無しさん
20/07/02 21:49:51.56 2Xt/GnSW0.net
>>144
ありがとうございました。参考になります。
>>145
消えろ

148:デフォルトの名無しさん
20/07/02 22:51:02.52 7/3Aifl90.net
ここが上級者ばかり集う高尚なスレだと思っているのかWWWWWWWWWWWW
VBAごときでWWWWWWWWWw

149:デフォルトの名無しさん
20/07/02 23:33:21.68 0km7hKfU0.net
VBAを随分下に見てるねえ。
別にC#で回答してもいいよ?
VBAに脳内変換するから。

150:デフォルトの名無しさん
20/07/02 23:47:09.16 Y/spJvDG0.net
上級者も馬鹿も両方いてあたりまえ
お前らそんなにマウントとりたいのかw

151:デフォルトの名無しさん
20/07/02 23:59:32.57 yXnL3NZ/0.net
誰か教えて。
式に=とか+を使うと字が読みにくくて困っています。
全角文字や絵文字を使うことはできないのでしょうか?
急いでいますからすぐに教えて、

152: テトリス ◆SYKnw8OJpw
20/07/03 00:10:57 .net
テスト

153:デフォルトの名無しさん
20/07/03 00:14:47.41 P5PHrlsB0.net
>>151
一休さんかコロンブスみたいな回答で良いなら出来る。
実際に全角文字や絵文字で書いてみな。

154:デフォルトの名無しさん
20/07/03 04:04:14.78 B7qpVotz0.net
Function 〓(ByRef a, ByVal b) : a = b : End Function
Function ┼(ByVal b, ByVal c) : 〓 ┼, WorksheetFunction.Sum(b, c) :End Function
これを入れておけば、=とか+から解放されるぞ
Sub test()
Dim a
〓 a, 1
Debug.Print ┼(a, 1)
End Sub

155:デフォルトの名無しさん (ワッチョイ 0a2f-+ZV3)
20/07/03 12:58:30 KESc8IU30.net
そんなソース絶対読みたくないな

読みやすいフォント探すか自作すればいいだけだろうに

156:デフォルトの名無しさん
20/07/03 13:30:11.45 hUamHkOVa.net
ハズキルーペ使えよw

157:デフォルトの名無しさん
20/07/03 21:14:38.38 mplhmvvw0.net
ワークシートの条件にあう行を削除して上に詰めるみたいなことを、配列内でしたいです。
多次元配列"ary"内の1列目が66か、6列が1000か、28列目が空欄のレコードを削除するコードを教えてください

158:デフォルトの名無しさん
20/07/03 21:23:34.89 Mxid+JS90.net
E列が空白になるまでE列とG~M列に特定の処理をしたくて
Do loopを使って何とかできないかと悩んでたけど座礁しますた
Eの11行目を起点にして
E列の数値が正の数ならEもG~Mも数値はそのまま
E列の数値が0ならEもG~Mも数値はそのまま
Eの数値が負の数ならEとG~Mの数値を-*1
と反転させたい
ってのは素人には荷が重すぎですかね?

159:デフォルトの名無しさん
20/07/03 21:31:07.37 DQKehNsV0.net
157,188
お互いに相手のコード相談しながら考えてあげればいいんじゃね
ちょうどよさげだわレベル

160:デフォルトの名無しさん (ワッチョイ 27ce-BXkI)
20/07/03 21:44:24 4NyCV/dB0.net
>>158
いいえ、がんばればできます

161:デフォルトの名無しさん
20/07/03 21:55:13.66 4NyCV/dB0.net
Sub Macro1()
  r = 11 '起点の行
  Do While Cells(r, "E") <> ""
    If Cells(r, "E") < 0 Then
      Cells(r, "E") = -Cells(r, "E")
      For c = Asc("G") To Asc("M")
        Cells(r, Ch r(c)) = -Cells(r, Ch r(c))
      Next c
    End If
    r = r + 1
  Loop
End Sub

162:デフォルトの名無しさん
20/07/03 22:17:41.55 aUU6z7Ir0.net
そもそもマクロ作るのって違うデータでも同じ処理をやりたいような場合じゃないのか
一回限りのデータ抽出ならわざわざマクロなんか作る意味ないんだけどな
無駄に時間を浪費したいのかな

163:デフォルトの名無しさん
20/07/03 22:37:42.83 qSqs6yG50.net
使い捨てマクロってのもありまして

164:デフォルトの名無しさん (ワッチョイ 6bda-ewff)
20/07/03 22:48:22 3J4wGhdX0.net
定型フォーマットの複数ファイルの同項目の値を集計したい
なんて時は使い捨てマクロかな

165:デフォルトの名無しさん
20/07/03 23:04:06.95 KESc8IU30.net
>>157
VBAの配列に要素詰める命令はなかったはずなので、どうしてもというなら
 該当要素より下の要素を一つずつ上にずらす
 最後の要素を消す
とやればできなくはないがお勧めはしかねる

166:デフォルトの名無しさん
20/07/03 23:06:05.89 KESc8IU30.net
>>158
それVBAじゃなくても計算式とワークの列使えばできると思うけど
なぜ素人がVBAでやろうと思うんだ

167:デフォルトの名無しさん
20/07/03 23:26:37.07 Mxid+JS90.net
>>161
構文エラーでしたわ
>>166
VBAでやりたかったのです…

168:デフォルトの名無しさん
20/07/03 23:27:55.78 8QUz9sdRa.net
確かに一回限りの作業なら
マクロ考えているよりやった方が終わってるかもな

169:デフォルトの名無しさん
20/07/03 23:35:20.76 P5PHrlsB0.net
>>157
配列内でやるならレコードセットだな。

170:デフォルトの名無しさん
20/07/03 23:42:57.67 9EQo/V7m0.net
一回きりだろうと同じ処理100回やるようなのもあるんだし

171:デフォルトの名無しさん
20/07/03 23:46:08.59 P5PHrlsB0.net
1回限りでも3行くらいで済むのは書くな。

172:デフォルトの名無しさん (ワッチョイ bb1d-+upQ)
20/07/04 00:48:12 KIBH4SNT0.net
まだ22歳の学生社長が得た、23億円の「使い道」
あの橋本環奈をCMに使うバイトアプリの雄
URLリンク(toyokeizai.net)
中学時代の車いす生活から、17歳で起業するまで
URLリンク(www.advertimes.com)
ミャンマー発 AIダイニングアプリ「Yathar」をしかける日本人起業家
URLリンク(roboteer-tokyo.com)
自分の視野は「世の中の0.001%」と自覚せよ。ビジネスチャンスを掴む4つの習慣
URLリンク(headlines.yahoo.co.jp)
アプリの視聴率がわかる 高専卒起業家の独創力
URLリンク(www.nikkei.com)
1万人の若者を支援!インターンが日本を変えるかも!? glowshipの若き創業者・足立卓也氏インタビュー
URLリンク(sogyotecho.jp)
大学生起業家が設立1年で20億円調達! 単発バイトアプリに外食企業など出資【タイミー】
URLリンク(foodfun.jp)

173:デフォルトの名無しさん
20/07/04 01:40:09.94 IOVEPry/0.net
一般論としては頻度の多い作業の方が自動化に向いてるのは確かだけど、
1回だけでも大量のデータを加工したり手作業でやるには時間のかかる作業もあり、
作業時間の方がコード書く時間より長くなる場合も多々もあるのでケースバイケースやね

174:デフォルトの名無しさん (ワッチョイ 5301-JCxG)
20/07/04 01:58:21 42LT/T3f0.net
逆に、山田やっとけ、というのはどうよ?

175:デフォルトの名無しさん
20/07/04 02:07:27.87 VMWug14q0.net
やるとは何を?

176:デフォルトの名無しさん
20/07/04 02:09:15.54 42LT/T3f0.net
データの加工。

177:デフォルトの名無しさん
20/07/04 02:10:42.23 VMWug14q0.net
加工すればいいんじゃね

178:デフォルトの名無しさん
20/07/04 02:13:10.44 42LT/T3f0.net
いや、山田がやってくれないかなって。
だめ?

179:デフォルトの名無しさん
20/07/04 02:16:03.66 VMWug14q0.net
だから山田がデータを加工すればいいんじゃね

180:デフォルトの名無しさん
20/07/04 02:38:36.13 VMWug14q0.net
素人にやらせた場合間違った結果を出すかもしれんが
その場合頼んだ側にも責任があるけどそれでも山田にやらせるか?

181:デフォルトの名無しさん
20/07/04 03:10:27.15 42LT/T3f0.net
田中のほうが良いかな?

182:デフォルトの名無しさん
20/07/04 03:37:53.50 OxpkXjjxa.net
斎藤さんだぞ

183:デフォルトの名無しさん
20/07/04 04:04:04.69 IjVZd7O90.net
山田ができるのは座布団運びだけだろ

184:デフォルトの名無しさん
20/07/04 07:02:36.51 VZt6Ms3K0.net
do whileとかほとんど使わないわ
あれ試行錯誤してる最中に脱出条件間違えて固まるとイライラってするんで
>>158こういうのは
途中で空白行挟んでたらどうすんのとか考えるとEnd(xlup)とか使って無難にforで回したい
最も空白行挟んでたらそこまでしか処理しないのかもしれんけど
それなら上から順に一旦回して空白行がどこに出るのか調べてからやるわ
全データ配列に格納してからやれば速度的にも問題ないと思うし

185:デフォルトの名無しさん
20/07/04 07:59:26.14 yagtSNgld.net
観測地点が全国で2000ヶ所、1時間毎の観測結果3年分のデータがあって、8時間毎に観測出来なかった場合も踏まえて平均し、観測出来なかったのが8時間の内4時間以上あったら平均値も出力出来なかったとする。
で、その8時間の平均値は1時間ずつずれて24個分で1日のデ―タとなるんだが、それをさらに平均して1日の値とする
なんてのやったが1回限りでもVBA使わないと無理。
というか普通に考えてVBAでも無理だけどね。

186:デフォルトの名無しさん
20/07/04 09:41:06.65 htrp3xgD0.net
>>157
配列に入れたら順番に書き込んで条件の時だけ書き込みスキップじゃ駄目なの?

187:デフォルトの名無しさん (ワッチョイ 1e8e-0gyK)
20/07/04 10:01:18 1naoKVTK0.net
>>185
お前の低い知能の頭ではできないだけだろ

188:デフォルトの名無しさん
20/07/04 11:47:27.20 VZt6Ms3K0.net
簡単だよな
セルにどういう風にデータが並んでるかで多少の工夫がいるかもしれんけど
加減乗除のみのワンパターン

189:デフォルトの名無しさん
20/07/04 12:11:54.32 xB5SKVkx0.net
水口克也氏のExcelVBA入門講座って本を使ったことある人いますか?
最後のじゃんけんゲームを作る所が、どうしてもうまくいきません

190:デフォルトの名無しさん
20/07/04 12:23:35.41 KlM0EefbM.net
>>185
作業シート使ってExcelだけでできるんじゃね?
そもそも移動平均の平均とかあまり意味ないことやってる方が気になるけど

191:デフォルトの名無しさん
20/07/04 12:37:06.40 /jHrZd8o0.net
8時間平均から24時間平均への変換は一般的なLPF処理だな
デジタル信号処理で数値データを扱う基本的な考え方だよ

192:デフォルトの名無しさん
20/07/04 13:05:03.59 VZt6Ms3K0.net
>>157
全要素forで回しながら
条件合うものだけを新しい配列newArrayにいれていけばいいじゃん
その後新しい配列から、データ空にしたシートに記入
新しい配列の要素数、特に1次元要素数(行数)だけど
Redim Preserveで順次増やしていくのはこの場合できないから、
一旦行数を確定するためだけにfor回してカウント
要素数確定したnewArray作ってから
もう一度for回して入れていけばいい
行列逆転させればredim preserve使って一発でもいけるか
特に巨大なデータでなければ間違い避けるために二回まわすなおれなら
行削除によって表自体の体裁を上に詰めていきたいっていうなら
最初にforを回した後、元の行数とnewArrayの行数の差だけ表の行を削除
データはすでに配列にとってあるんだからどこから削除しても構わない

193:デフォルトの名無しさん (ワッチョイ 8a01-21HI)
20/07/04 13:32:13 IjVZd7O90.net
>>191
それ一気に24時間平均でよくね?

194:デフォルトの名無しさん
20/07/04 13:43:57.26 /jHrZd8o0.net
いきなりデータ粒度を荒くするのは悪手
ましてや>>185の場合はじめに欠損データのノイズキャンセルも行っているのでまとめて行なうとデータの精度が低下する

195:デフォルトの名無しさん (アウアウエー Sa82-h0J+)
20/07/04 14:05:30 Em2AcreDa.net
24コマを1コマにするんだから
平らに均すのに精度もクソも無い気がする

196:デフォルトの名無しさん
20/07/04 14:21:18.07 /jHrZd8o0.net
データ値の定常状態と過渡状態を理解していれば分かる
粒度が荒いと応答性が悪化するので現象の追従が遅れる
安定時のデータ値だけならともかくデータの変化を取りこぼすリスクが高くなるんだよ

197:デフォルトの名無しさん (アウアウエー Sa82-h0J+)
20/07/04 14:31:13 Em2AcreDa.net
>>196
そりはモニタのアッパーとローワーにトリガー仕込んだら良い話ではないのでしゅか?

198:デフォルトの名無しさん
20/07/04 14:44:04.22 /jHrZd8o0.net
上限、下限決め打ちの場合はトリガ仕込むのでも通用はする
ただ一日当たりの変化量でアクション起こす場合はどうする?
移動差分(微分)を連続的にデータ処理しないと難しい

199:デフォルトの名無しさん
20/07/04 14:48:04.16 ZiXQ0AsVa.net
喧嘩はやめよう

200:157
20/07/04 14:58:18.35 oup49XFx0.net
>>186
仮の配列を作り、編集してaryに入れるようにしたいのですが
これだと、全て空欄になってしまいます
Dim i As Long, j As Long, cnt As Long, cnt2 As Long
i = Cells(Rows.Count, 1).End(xlUp).Row
'仮の配列
ReDim Kariary(i, 30) As Variant
Kariary = Range("A2:AD" & i).Value
'最終的に代入する配列
ReDim ary(i - 1, 30) As Variant
For cnt = 1 To i - 1
If Not Kariary(cnt, 1) = 66 Or _
Kariary(cnt, 6) = 1000 Or _
Kariary(cnt, 28) = "" Then
j = UBound(ary) + 1
If j < i - 1 Then
For cnt2 = 1 To 30
ReDim Preserve ary(j, 30) As Variant
ary(j, cnt2) = Kariary(cnt, cnt2)
Next cnt2
End If
End If
Next cnt
'シートを一旦クリア
Cells.Clear
Range("A2:AD" & i) = ary

201:デフォルトの名無しさん
20/07/04 15:04:44.69 xhESn47nr.net
はい

202:デフォルトの名無しさん (アウアウエー Sa82-h0J+)
20/07/04 15:22:36 ZKMg5qK7a.net
>>198
地デジのようなリアルタイムデコードじゃなくて
過去に既に起こってしまったデータ欠損の過ちをVBA で穴埋めしようとしたたところで土台遅いと言う話でした。
>>199
そうですね

203:デフォルトの名無しさん
20/07/04 15:31:40.93 VZt6Ms3K0.net
>>200
頭が痛くなってくるんだけど
まずifの条件がおかしい
自分で簡単の作って確かめてみ
こういうの
思ってるような動きするか確かめてみ
プログラムってのはそういうことしないとだめだわ
まっさらなxlsm作ってデータも簡単のシートに作ってやってみ
そうすりゃすぐ分かる
Sub teeee()
 With ActiveSheet
  If Not .Cells(1, 1) = 66 Or .Cells(2, 1) = 2 Then
   MsgBox "ok"
  End If
 End With
End Sub
例えばさ、
ary(j, cnt2) = Kariary(cnt, cnt2)
これにブレークポイントつけてここに到達するケースがあるか調べてみ
それだけで何か分かるわ
まぁだれか正解のコード書いちゃうんだろうけど
デバッグ
ブレークポイント
これ使えないとまともなコード書けないぞ

204:デフォルトの名無しさん (ワッチョイ 8a01-5cl0)
20/07/04 15:38:09 VZt6Ms3K0.net
それだけじゃないからな
redim preserve は、くせ者

205:デフォルトの名無しさん
20/07/04 15:42:33.80 RSp2d2NT0.net
redimしなくても十分な量確保しといてどこまで使ったか変数に入れときゃいいだけだろ
わざわざ負荷かかることする意味がない

206:デフォルトの名無しさん
20/07/04 15:56:38.11 D9As6lACa.net
プロはとりあえず配列に格納するのが好きなんです

207:デフォルトの名無しさん
20/07/04 16:03:39.61 DEQjmcqBd.net
>>187
>>190
やって見てから言えよw
問題は時間だ。
2000x365x24x3=52560000
100列で50万行だぞ。
実際やったわけだが、普通にやって6時間とかかかる感じだった。
勿論、初心者じゃないから2次元配列使うのも当然やってる。
まあ、6時間もかけたく無かったからマルチプロセスにして1時間ぐらいにしたけどな。

208:デフォルトの名無しさん
20/07/04 16:04:11.08 qCMIttGKd.net
十分な量を確保
あとで失敗するパターン

209:デフォルトの名無しさん
20/07/04 16:09:00.53 MUUOvXMba.net
data.csv
年月日,時間,気温,湿度
2020/07/04,11:15,28.5℃,78%
2020/07/04,12:15,ー,78%
2020/07/04,13:15,28.5℃,ー
2020/07/04,14:15,ー,ー
2020/07/04,15:15,28.5℃,78%
・・・
・・

1カ月データとして24時間×31日=744行+先頭行
1年12ヶ月データで8,928行かぁ
データスルーとかデータ穴埋めとかって
どっちの場合も
VBA じゃなくてデータベースのSQLで出来たりするのかな?

210:デフォルトの名無しさん
20/07/04 16:22:41.23 DNEaiqy30.net
おれならそもそも案件をRDBMSに移す提案をするわ
だめなら元データはどうせCSVやJsonかなにかだろうし、VBAから普通にRDBにいれてプロシージャ叩くとか
外部プログラムで直に処理するね
元データがExcelでExcel縛りなら、どうやって案件から手を引くかを考えるねw
Excel起動するVBAでやることじゃない
まあ金次第でもあるけど

211:デフォルトの名無しさん
20/07/04 16:30:22.62 DEQjmcqBd.net
>>209
う~ん、場所毎だから表になるっちゃあなるけど、SQLでやろうとは思わなかったし、どうやってやるのかも思い付かんわ。
仕事でSQLばかり触ってるが。
>>210
おう、確かに元データはCSVだった。
SQLで上手いことやるのが思い付かんが。

212:デフォルトの名無しさん
20/07/04 16:35:45.74 qCMIttGKd.net
pythonでデータクリーニングさせれば?

213:デフォルトの名無しさん
20/07/04 16:42:21.08 IjVZd7O90.net
>>196
> 安定時のデータ値だけならともかくデータの変化を取りこぼすリスクが高くなるんだよ
平均とってる時点で取りこぼしとか意味不明なんだけどw

214:デフォルトの名無しさん
20/07/04 16:47:20.12 IjVZd7O90.net
>>207
2000列で高々3万行程度だろ
Excelの計算式はマルチスレッドで動くから自称「初心者じゃない」君のVBAより速いと思うぞ

215:デフォルトの名無しさん
20/07/04 17:02:54.82 DEQjmcqBd.net
>>214
バーカw
やってから言え。
本当バカだなあ。
そもそもファイル重くて碌に動かねえよ。

216:デフォルトの名無しさん
20/07/04 17:18:55.42 pfDbF4Mra.net
どうせ適当なデータでっち上げて表示させても気づかないだろ

217:200
20/07/04 17:35:53.50 oup49XFx0.net
>>203
おっしゃる通りでした。
IFに問題があったみたいです。ありがとうございました。

218:デフォルトの名無しさん (ワッチョイ 8e02-JJ0U)
20/07/04 17:46:55 aRnpDm0b0.net
5ちゃんのExcelVBA質問スレでMonaさんに対してマウントを取りたいのですが、
Mount Mona
と記述してもマウントが取れません
どうすればいいですか?

219:デフォルトの名無しさん
20/07/04 17:49:24.23 1naoKVTK0.net
>>207
お前が馬鹿なだけだろ
全部メモリーに置く理由もない
己の頭の問題を仕様の問題とすり替えるな

220:デフォルトの名無しさん
20/07/04 17:54:43.71 oup49XFx0.net
A列の2行目以降に値あり、B列の2行目以降に同じ行のA列の値が
上から何回目に出現したかを返す関数として「=COUNTIF($A$1:A2,A2」を使っています。
同じことを配列で使用する方法を教えて下さい。
(A列の値は並び替えをしてあります)
Dim EndRow As Long, r As Long
EndRow = Cells(Rows.Count, 1).End(xlUp).Row
ReDim ary(EndRow, 2)
ary = Range("A2:B" & EndRow).Value
For r = 1 To EndRow - 1
ary(r, 2) = Application.WorksheetFunction.CountIf _
(Range(ary(1, 1), ary(r, 1)), ary(r, 1))
Next r
これだとRangeメソッドは失敗しましたになります。

221:デフォルトの名無しさん
20/07/04 18:14:15.70 DEQjmcqBd.net
>>219
出来もしないこと言ってるバカ?
それとも、それ迄のやり取りすら出来ないバカ?
手作業やExcel数式でやってから言え。
ちゃんとそれ迄のやり取りも読んでから言えよw

222:デフォルトの名無しさん
20/07/04 19:58:17.09 VZt6Ms3K0.net
>>185
批判したいとかそういうもんじゃないんだけど
わりと大きなデータ扱うことに興味があったんでどんなもんか実際やってみた
1カ所分しかやってないんだけど
csvから取得して平均値26280個をシート記入するまで1秒もかかってない感じ
一日ごとの平均は出してないけどこの分じゃそれほど差はないと思う
もしや取得時には配列で一括取得してても
シート記入時に配列使った一括記入してないんじゃ?

も少し情報提供すると
URLリンク(www.data.jma.go.jp)
ここから3年分時間別気温データを、1年ごとcsvにして三個ダウンロード
URLリンク(www.moug.net)
これと同じ感じでOpen使って取得
年ごとに必要な気温データのみ1次元配列に入れる
3つの配列を1つの配列にまとめる
平均値入れていく配列AveArrayを新しく作る(あえてString宣言)
あとはforで回しながら過去8時間分のデータを調べてデータない場合の個数を調べて
4つ以上ならAveArrayにN/Aを入れる
4つ未満なら8時間合計して、有効データ数で除算し、AveArrayに入れる
AveArrayを列数1の2次元配列にしてからシートに一括記入
なんかおれ間違ってる?

223:デフォルトの名無しさん
20/07/04 20:07:02.00 ZiXQ0AsVa.net
こうやって実際にやってみる人は素晴らしいと思う

224:デフォルトの名無しさん
20/07/04 20:15:53.04 /OqMGH1W0.net
>>220
matchならともかくcountifは配列に対応してない
素直にセルを引数にしてやったほうがいいのでは

225:デフォルトの名無しさん
20/07/04 20:17:12.12 JHoncA5/a.net
countifじゃなくてloopでfindにすればよいのでは

226:デフォルトの名無しさん (ワッチョイ 87da-VQSO)
20/07/04 22:27:57 VMWug14q0.net
VBAは手段の一つ、目的はデータの加工ってわりきればすぐ終わる作業なのに
無理してVBAだけでやろうとするからいつまでもおわらない

227:デフォルトの名無しさん
20/07/04 23:58:08.33 DEQjmcqBd.net
>>222
ちょっと見た感じほぼ、俺と同じ感じだね。
>もしや取得時には配列で一括取得してても
シート記入時に配列使った一括記入してないんじゃ?
オイオイ、そんな素人なわけ無いだろ。
Line inputを使ったか、それより速いバイナリ読み込み+StrConv使ったかについては覚えて居ない。
まあ、速いといっても劇的に速くなる訳じゃないから、そんなことよりマルチプロセスってことでLine inputのままだったかも。
オレがやった時のデータは日付+24列のデータだった。
貼り付けは元データ込みで、元データの右に8時間平均と1日平均書いたと思うが、もしかしたら8時間平均は出力しなかったかも。
多分読み込みよりも列を増やした二次元配列にして書き込みにも利用してたと思う。

228:デフォルトの名無しさん (スップ Sd4a-aBdg)
20/07/05 00:48:44 poq4gvQsd.net
複数のファイルの名前を編集したい

具体的には、全てのファイルのファイル名に、2020と入れたい。

229:デフォルトの名無しさん
20/07/05 00:51:15.79 C4Jqu0Op0.net
DOSコマンドでできる

230:デフォルトの名無しさん (ワッチョイ 27ce-BXkI)
20/07/05 01:49:00 UMxIfgnY0.net
>>228
ファイル名のどこに入れるの?先頭?真ん中?末尾?

231:デフォルトの名無しさん
20/07/05 01:59:51.75 S3+IlzuQ0.net
>>230
その程度vbaなら自由自在でしょ
バカにしないでください

232:デフォルトの名無しさん
20/07/05 02:04:39.40 sCEs+yW00.net
>>227
お前の書き込みは、
「というか普通に考えてVBAでも無理だけどね。」
だろ
後付けで時間がとか言い出して誤魔化すんじゃねーよ

233:デフォルトの名無しさん
20/07/05 03:08:45.12 EDU6Wt820.net
powershellでやれ

234:デフォルトの名無しさん (ワッチョイ 8a01-c9XW)
20/07/05 07:10:34 Mq9FuBzw0.net
標準モジュールに、
Sub 1()
・・・
・・・
End Sub

Sub 2()
・・・
・・・
End Sub

Sub 3()
・・・
・・・
End Sub
と、書いていき、Sub 1()がSub 2()を呼び、Sub 2()がSub 3()を呼ぶ、って可能でしょうか?

235:デフォルトの名無しさん
20/07/05 07:16:23.84 2yUokYO9d.net
>>232
???
日本語が理解出来ないのか?
>なんてのやったが1回限りでもVBA使わないと無理。
「やった」と書いて有るだろ。
その後に「普通に考えて」とも書いてる。
実際にやったが、普通はVBAでも無理という意味だよ。
>>222とほぼ同じで6時間かかるからマルチプロセスにしたんだからな。

236:デフォルトの名無しさん (ワッチョイ 8a01-5cl0)
20/07/05 07:44:05 VaIdJVAp0.net
>>227
せっかくなんで
csvは日付+24列に加工してみた

1カ所の8時間ごと平均データ26280個を作って1列に貼り付けるfunctionを作る
引数は貼り付け先の列の列番号

これを
?1回だけ実行 A列のみに貼り付け
?100回実行 A列から右100列に1列ごと貼り付け
?200回実行 A列から右200列に1列ごと貼り付け


timer付けて一応測ってみた

?0.31秒
?32秒
?67秒

2000回だと12分ぐらいか?

CPU i5-4670
メモリ 24GB
Win7

実行時はPCでテレビ見ながらJane2個起動
firefox、Janetterなど20個以上のアプリが動いてる

環境やらデータの数値の大きさやらで
差は2000倍に拡大する可能性があるんで何とも言えない
うちの職場のしょぼいPCでやったらもっと酷いと思う

237:234 (ワッチョイ 8a01-c9XW)
20/07/05 07:54:44 Mq9FuBzw0.net
>>234をグーグルで検索するには、どういうキーワードで検索すればいいでしょうか?

238:デフォルトの名無しさん
20/07/05 07:57:11.74 R1IME3L+0.net
>>228
Ruby で作った。
ただし、DryRun なので実際には実行されません!
require 'fileutils'
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
glob_pattern = "C:/Users/Owner/Documents/*"
src_dir = File.dirname( glob_pattern ) # ディレクトリパスだけを取り出す
Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ処理する
.each do |full_path| # 1つずつ処理する
dest_path = src_dir + "/" + "2020_" + File.basename( full_path ) # ファイル名
FileUtils::DryRun.move( full_path, dest_path )
end
# mv C:/Users/Owner/Documents/a.txt
# C:/Users/Owner/Documents/2020_a.txt

239:234
20/07/05 08:01:08.68 Mq9FuBzw0.net
>>228
ファイルをバイナリで読み込んで、バイナリで書き出す、
で、書き出す際に、ファイル名に"2020"&、とすればいい。

240:デフォルトの名無しさん
20/07/05 08:01:41.62 VaIdJVAp0.net
>>234
うん
>>237
vba 関数 呼び出し
偉いね、その姿勢があればすぐにプロフェッショナルだわ

241:デフォルトの名無しさん
20/07/05 08:04:40.53 nDNnOTMWa.net
>>234
普通に最後にサブルーチンの名前呼び出し書いたら良いのでは?
Sub 1()
・・・
・・・
2
End Sub
Sub 2()
・・・
・・・
3
End Sub
Sub 3()
・・・
・・・
End Sub

242:234
20/07/05 08:05:40.42 Mq9FuBzw0.net
>>240
どうもです。

243:234
20/07/05 08:06:29.51 Mq9FuBzw0.net
>>241
どうもです。

244:デフォルトの名無しさん
20/07/05 11:36:58.35 CJtrxhlB0.net
>>242
呼び出しは、可読性考慮すると文頭にCall書いた方がいいよ

245:デフォルトの名無しさん
20/07/05 13:58:43.83 U1BgWcwt0.net
>>207
VBAでやっても6時間はかかりすぎな気がするが
マシンスペックとコード晒してみ
それ、計算式でやって再計算に1時間以上かかるのか?
当然試してるよな
マルチプロセスもどうやってやったのか気になるが
俺なら間違いなくDBにつっこんでSQLでやる
そういえばエクセルシートなりCSVなりに対してSQL投げる方法がいくつかあったけど
それは試したのか?

246:デフォルトの名無しさん
20/07/05 15:07:25.29 2yUokYO9d.net
>>239
ファイル名変更だから読む必要は無いだろ。
変更するだけでOK。

247:デフォルトの名無しさん
20/07/05 15:11:46.86 BTTSshKd0.net
>>244
おれもsubモジュール呼び出しはCallつけるようにしてる
他の言語いじったにあととかにVBAのその行みたらよくファッ!?って一瞬なるから

248:デフォルトの名無しさん
20/07/05 15:16:11.04 2yUokYO9d.net
>>245
SQLに投げるのは簡単だが、今回の問題でどういうSQLで出来るのかが分からんかった。
今でも思い付かんが。
計算式ではやってないな。
まあ、無駄なんで。
というか、本当にやる奴が出るとは思わんかったから、言わんかったが他にも制約は有ったんだわ。
それにしても>>236は速いな。
ちょっとおれも調べてみるか。
ちなみにこの仕事数年前なんで完全に憶えてるわけじゃない。

249:デフォルトの名無しさん
20/07/05 15:22:54.54 2yUokYO9d.net
マルチプロセスはExcel.Application8個(自分含めて)呼び出して、自分のブック開いて別CPUにやらせるプロシージャをApplication.OnTimeで呼び出したかSetTimerで呼び出したかだったんじゃないかな。
細かい連携しないで済むようにしてたと思う。
複雑なことはやってねえよ。

250:220 (ワッチョイ 87cc-ERT+)
20/07/05 19:59:50 Y6miK3VP0.net
>>224
いろいろ試してダメだったらそうします

>>225
ありがとうございます。そうします

251:デフォルトの名無しさん (スプッッ Sd4a-tYaB)
20/07/05 21:27:28 2yUokYO9d.net
>>236
う~ん、分からん。
俺もやってみたんだが、同じような時間だった。
観測値はテキ卜一に0~100をランダムで書き込み。
観測出来なかった値は当時の記憶を頼りに9999とした。
確か9998もあったけど変わらんだろう。

前に書いた制約というかは、1年分のファイルが50~60個ぐらいだったということ。
つまり県ごとのファイルで観測地が多い所は複数ファイルって感じ。
だから実際は行頭に観測地名が入って、その後に何かの数値とかが幾つかあって日付、観測値という具合だった。
年ごとのファイルが完全に固定フォーマットで無かったか、俺が信用してなかったか、観測値名で検索してたと思う。
そこから365日分は連続してたと思うけど。

それでも6時間は掛からんような気がしてきた。
もっと複雑なことやってたのかなあ。

どっちにしても後だしで申し訳ない。

252:デフォルトの名無しさん
20/07/05 22:26:04.09 ys79fvH60.net
>>251
そもそもいつ頃の話よ
うろ覚えだけど2010あたりから計算式はめちゃめちゃ速くなってるぞ
あとでかいブックは64bit化の恩恵もあるし

253:デフォルトの名無しさん
20/07/05 22:29:31.22 2yUokYO9d.net
>>252
調べたらそんなに昔じゃ無かったな。
2016年だった。

254:238 (ワッチョイ 872c-+ZV3)
20/07/05 22:43:00 R1IME3L+0.net
ファイル名の先頭に、2020_ を付けるぐらい、robocopy で出来ないのか?

255:デフォルトの名無しさん
20/07/05 22:49:17.55 ys79fvH60.net
2016ならよほど変なことをしてないと数時間とかかからんと思う

256:デフォルトの名無しさん
20/07/05 23:53:51.99 C4Jqu0Op0.net
2020_2020_2020_2020・・・・

257:デフォルトの名無しさん (ワッチョイ ea24-bNAA)
20/07/06 00:43:25 Cn1gvhVh0.net
officeが32bitだったというオチは?

258:デフォルトの名無しさん (オッペケ Sr23-aBdg)
20/07/06 06:39:12 NN5xIHVpr.net
workbookとworksheetって何が違うか。

259:デフォルトの名無しさん
20/07/06 07:15:30.65 5mzvDM1u0.net
キングジムファイルと綴じられてる一覧表って感じかな

260:デフォルトの名無しさん
20/07/06 08:12:33.04 XvhlV03D0.net
32bitと64bitで計算スピードの差は2倍もないような

261:デフォルトの名無しさん
20/07/06 08:39:32.35 NN5xIHVpr.net
Activesheet.cells(1.1).Activate
Activesheet.Paste
は上手くいくのに、
Activesheet.cells(1.1).Paste
は何でダメなんですか?

262:デフォルトの名無しさん
20/07/06 09:18:02.55 Ag715axD0.net
>>261
.pasteは、worsheetのメンバであってrangeやcellsのメンバじゃないから、かな?

263:デフォルトの名無しさん
20/07/06 09:49:31.89 Smcv6rvz0.net
パラメータ Destinationがあるから
ワイはPasteSpecialのほうが好き

264:デフォルトの名無しさん
20/07/06 12:08:40.63 0NryXgvDd.net
>>263
普通はCopyのDestinationでやるからな。
Paste使うのはRange以外のコピーの時かな。

265:デフォルトの名無しさん
20/07/06 18:39:32.80 XttWreH00.net
For
処理1
処理2
処理3
処理4
Next
よりも
For
処理1
Next
For
処理2
Next
For
処理3
Next
For
処理4
Next
の方が処理が早い傾向がありますが、そういうものですか?

266:デフォルトの名無しさん
20/07/06 19:08:39.04 tFUllOPh0.net
>>254
出来ないよ????
robocopy はファイル名の変更はできない。
robocopy したあと move するしかない。
…あ。こいつWSHスレを荒らしてたrubyおじさんじゃんww

267:デフォルトの名無しさん
20/07/06 19:10:33.89 tFUllOPh0.net
てか、もうRubyは徒花だったな。
人気もダダ下がりだし。

268:デフォルトの名無しさん (スプッッ Sd4a-tYaB)
20/07/06 20:45:52 0NryXgvDd.net
>>266
よく分からんが、そもそも何でRubyが出て来るんだ?
VBAだってNameステートメントで一発なのに。

269:デフォルトの名無しさん
20/07/06 20:59:38.60 aGu/2bZb0.net
>>265
普通にかんがえて、前者のほうがループのオーバーヘッド分早いはずだが
その傾向ってのはどうやって調べたのか

270:デフォルトの名無しさん
20/07/06 21:12:06.08 tFUllOPh0.net
>>268
どこでもかしこでもRubyで書いて押し付けてきて、「出来だよ!」っていうオジサンがいるのよ。
WSHスレでは「Rubyおじさん」として有名だった。
が、自分よりスキルの上な奴がコードをうしたら黙り込む。
こんなところにまで出張いてるとはね…。
無視推奨。Rubyはオワコンだし。

271:デフォルトの名無しさん
20/07/06 21:13:16.26 K1goXTAAa.net
じゃあVBAはお爺ちゃんだろ

272:デフォルトの名無しさん
20/07/06 21:17:13.18 tFUllOPh0.net
>>271
VBAは「頼れるジジイ」だろ。何言ってんの?

273:デフォルトの名無しさん
20/07/06 21:29:12.52 XvhlV03D0.net
>>265
そんなのは処理による
コードが長くなったりループの中で扱うデータが増えるとメモリキャッシュがあふれて遅くなる可能性が高くなる

274:デフォルトの名無しさん
20/07/06 22:27:45.01 33E9zFJO0.net
Rubyの話がしたければRubyのスレ行けばいいのにね

275:デフォルトの名無しさん (スプッッ Sd4a-tYaB)
20/07/07 12:27:17 mk51G87Dd.net
>>270
いや、それはRubyが優位と言いたいが為だろ。
全然優位じゃない所に出てくるのが分からん。

276:デフォルトの名無しさん
20/07/07 19:51:41.03 CAdbpiIn0.net
宣伝だろ

277:デフォルトの名無しさん
20/07/07 20:15:33.65 2cf+0s2v0.net
音楽のmidiファイルを作りたい、つまりバイナリファイルを作りたい者です。で、
↓を試してみたいのですが、"C3"にバイナリの配列を書き込まなければいけません。
この場合、どうやってexcelのセルに、バイナリの配列データを書き込むのでしょうか?
URLリンク(oshiete.goo.ne.jp)
Sub test()
 TEMP = Worksheets("Sheet1").Range("C3")
 ReDim BIN(Len(TEMP) / 2 - 1) As Byte
 For I = 1 To Len(TEMP) Step 2
   BIN((I - 1) / 2) = Val("&H" & Mid(TEMP, I, 2))
 Next I
 Open "1.BIN" For Binary As #1
 Put #1, , BIN
 Close #1
End Sub

278:デフォルトの名無しさん
20/07/07 20:25:40.74 BPFgnJg70.net
なんでVBAでやるの?

279:デフォルトの名無しさん
20/07/07 20:27:13.84 z4TbLErcM.net
VBAスレだから

280:犬丸
20/07/07 20:31:41.96 2cf+0s2v0.net
>>278
和音の構成音(ドレミ・・・)を1つづつセルに入れられるから。

281:デフォルトの名無しさん
20/07/07 20:33:47.85 BPFgnJg70.net
なんでdominoとか使わないの?

282:デフォルトの名無しさん
20/07/07 20:34:49.08 2cf+0s2v0.net
あと、PCにインストールされてる開発系はexcelだけだから。

283:277
20/07/07 20:41:28.24 2cf+0s2v0.net
つか、改変させたいmidiファイルが300個位あって、それの欲しいデータのexcelファイルへの読み込みはもう終わったわけ。
あとは、そのデータをちょい改変して、同様な300個のmidiファイルを吐き出すだけなんですよ。

284:277
20/07/07 20:42:49.00 2cf+0s2v0.net
だから、excelでバイナルファイルを作りたいのです。

285:デフォルトの名無しさん
20/07/07 21:00:27.95 yByKJQAn0.net
読み込めたなら反対をやればいいんじゃないの

286:デフォルトの名無しさん
20/07/07 21:05:07.15 CAdbpiIn0.net
>>283
著作権的にどうなの?

287:277
20/07/07 21:10:37.49 2cf+0s2v0.net
>>285
日本語だってそうだろ。
読むのは簡単。 書くのは大変なんだよ。
>>286
ネットで買った和音だけの簡単なデータで改変したデータを自分だけで使うぶんには問題ありません。

288:デフォルトの名無しさん
20/07/07 21:13:27.88 BPFgnJg70.net
じゃあそうすればいいじゃない?
所詮16進数の文字の羅列(Byteの配列とかにはさすがに出来てるんやろ?)なんだから
最終的には好きに料理してファイルに吐き出せばいい
ただ、1つのセルにバイナリなんて入れたら手作業で編集なんてしずらくてしょうがないけどな
あとセルの文字数上限もあるだろうし
midiの規格書読んだことあるのかしらんが、よくチャンクとかバイナリいじって編集しようと思うな

289:デフォルトの名無しさん
20/07/07 21:13:57.80 CAdbpiIn0.net
>>287
ならmidiの編集ソフトが使った方がいいね

290:277
20/07/07 21:14:00.67 2cf+0s2v0.net
>>286
そもそも観賞するためのmidiデータではなく音楽制作に使うツールとしてのmidiデータなんだよね。

291:デフォルトの名無しさん
20/07/07 21:14:32.40 /HMzap4UM.net
>>282
C#やVB.NETもあるけど?w

292:277
20/07/07 21:22:41.71 2cf+0s2v0.net
>>288
> midiの規格書読んだことあるのかしらんが、よくチャンクとかバイナリいじって編集しようと思うな
基礎的な部分は把握してます。
> 所詮16進数の文字の羅列(Byteの配列とかにはさすがに出来てるんやろ?)
これがわからないんです。たとえば、4D 54 68 64という16進のデータをexcelの1つのセルに書き込む方法を教えて欲しいのです。

293:277
20/07/07 21:25:44.85 2cf+0s2v0.net
で、excelの"C3"に、4D 54 68 64を書き込んで>>277のソースを動かして試してみたいんです。

294:デフォルトの名無しさん
20/07/07 21:26:04.88 CAdbpiIn0.net
これなんか良いんじゃね
URLリンク(openmidiproject.osdn.jp)

295:デフォルトの名無しさん
20/07/07 21:29:51.89 CAdbpiIn0.net
midiの規格ってそんな簡単じゃないから素人が扱っても音が切れたりトラックがずれたりして
結局使えないだろ

296:デフォルトの名無しさん
20/07/07 21:32:34.47 7cSgkxva0.net
ExcelのRange#valueにバイト列なんか入るわけないんだから自分がわかりやすいように文字列か数値に勝手に変換して勝手に入れろとしか言えない

297:デフォルトの名無しさん
20/07/07 21:34:29.92 MaHOmhaOM.net
Excelでmidiデータを取り扱うなんて常人の発想ではない
たぶんあなた以外に誰も方法はわからないから頑張ってその道の第一人者になって欲しい

298:デフォルトの名無しさん
20/07/07 21:35:25.31 BPFgnJg70.net
>>292
セルに入れられるのはあくまで文字列ってこと理解してないの?
その例なら「Byte(0):77 Byte(1):84~」とかいう配列から「4D 54 68 64」という文字列にしなければセルには書き込めない
Byteはそれぞれの数値が入ってるだろうけど、hexかなんかで16進数にしたうえで(編集上必要あるか知らんけど)
join(array, " ")かなんかで1つの文字列にする
くっそ編集しずらいだろうけどな

299:デフォルトの名無しさん
20/07/07 21:44:56.92 tZSrRerM0.net
前スレのテキストフルスキャンの発想とコード提示してくれた人
改めて言わせて貰う
職場の一大イベントを乗り切ったわこれで

300:デフォルトの名無しさん
20/07/07 21:46:02.99 tZSrRerM0.net
改めて多大なるお礼を言わせて貰うが抜けてた
これのおかげですべての可能性が広がったわ

301:277
20/07/07 22:23:53.24 2cf+0s2v0.net
では、すみません。 >>277の質問はなしにして、↓の質問をお願いします。
1、変数に「4D 54 68 64」のバイナリデータを代入するソース
2、中身は「4D 54 68 64」だけのファイル
3、ファイル名は5ch.bin
こんなファイルを作るにはどのようなソースを書けばよいでしょうか?

302:277
20/07/07 22:29:17.16 2cf+0s2v0.net
>>228
allrenameというフリーソフトを使えばいいのじゃ。

303:デフォルトの名無しさん
20/07/07 22:32:51.69 CAdbpiIn0.net
>>301
バイナリ編集のソフト使えばいいんじゃね

304:301
20/07/07 22:42:26.54 2cf+0s2v0.net
>>303
すみません。 「VBAを使って」でした。

305:デフォルトの名無しさん
20/07/07 22:43:37.27 O/UE8zUS0.net
もはやExcelを使うことが目的化してる

306:デフォルトの名無しさん
20/07/07 22:44:27.22 yByKJQAn0.net
それもう読み込んだデータ無意味やん
フォーマット知らんけどセルに書き出せたんならファイルにもいけるやろ

307:301
20/07/07 22:54:30.10 2cf+0s2v0.net
>>306
基礎になるソースさえ教えてもらえれば、そこに色々付け加えてって自分に必要なバイナリファイルが作れるんですよ。

308:デフォルトの名無しさん
20/07/07 22:57:06.69 BPFgnJg70.net
まず書く努力をしよう

309:デフォルトの名無しさん
20/07/07 22:57:22.32 0KBHODZEd.net
>>307
そろそろ死ねや

310:デフォルトの名無しさん
20/07/07 23:05:51.69 1TMQwlbY0.net
Excelの設定もAppDataの中身も場所も変えて無いのに、
下記のように表示されてマクロが読めません!
「起動フォルダーにある個人用マクロブックは記録のために開かれた状態でなければなりません」

311:デフォルトの名無しさん
20/07/07 23:09:31.21 exS2x9T+0.net
>>310
そのままググった
URLリンク(xtech.nikkei.com)

312:デフォルトの名無しさん
20/07/08 00:06:04.08 66yUE/saa.net
>>301
「'4D 54 68 64'」シングルかダブルで囲えば良いのでは?
「"4D 54 68 64"」
あるいは
いったんタブ区切りファイルtmp.tsvを途中で
中間ファイルとして介在させたらいいんじゃないですか?

313:デフォルトの名無しさん
20/07/08 00:14:08.99 4BPfKF9s0.net
ソースくれくれ君だからひんとあろうが自分で書かないよ、こういうやつ

314:301 (ワッチョイ 2301-6wWl)
20/07/08 01:45:46 gPwSdoJG0.net
>>312
ありがとうございます。でも、「セルから変数を代入する」は止めました。で、>>277を変形してみたんですけど、↓のドコがまずいんですかね?

Sub test()
Dim TEMP As Variant
Dim I As Variant
Dim BIN As Variant

TEMP = Array(&H4D, &H54, &H68, &H54, &H68, &H64)
ReDim BIN(Len(TEMP) / 2 - 1) As Byte
For I = 1 To Len(TEMP) Step 2
BIN((I - 1) / 2) = Val("&H" & Mid(TEMP, I, 2))
Next I
Open "C:\1.BIN" For Binary As #1
Put #1, , BIN
Close #1
End Sub

315:301
20/07/08 01:49:45.50 gPwSdoJG0.net
つか、
ReDim BIN(Len(TEMP) / 2 - 1) As Byte
この部分が何だかわかんないんですよ。
まず、ReDimとは何だ?と。

316:301
20/07/08 02:05:21.42 gPwSdoJG0.net
目的は、
&H4D, &H54, &H68, &H54, &H68, &H64という6個のバイナリデータだけの、
1.BINというファイルを作りたい!
です。

317:デフォルトの名無しさん (ワッチョイ cb63-jZ9g)
20/07/08 03:08:12 F8fi/iH60.net
Excelでやる事ではない
以上です

318:デフォルトの名無しさん (ワッチョイ cb63-jZ9g)
20/07/08 03:11:39 F8fi/iH60.net
まずバイナリが何かすら分かってなさそうだしこの分だとmidiについても何も分かってなさそう

319:デフォルトの名無しさん (ドコグロ MM43-jxlo)
20/07/08 03:24:41 llacuNM3M.net
ここで聞くより、「vba バイナリデータ」でググったほうが早そう

320:デフォルトの名無しさん (アウアウウー Sa09-X/TW)
20/07/08 04:08:36 a4KGuVW5a.net
うちは会社のpcでバイナリ編集するのってセキュリティー的にアウトだし

321:デフォルトの名無しさん
20/07/08 05:18:34.50 hKBgVgLRr.net
この写真のように、例えば、3以下の数値をアクティブにする方法を教えて頂きたい
できれば、for next 構文はなしで
一発検索が望ましい。

URLリンク(i.imgur.com)

322:デフォルトの名無しさん (アウアウエー Sa13-c9t6)
20/07/08 06:25:23 yrsbI81qa.net
>>315> ReDimとは何だ?と
思ったらググって下さい。
ReDim BIN(Len(TEMP) / 2 - 1) As Byte
よくわからないですが動的配列を半分の長さで確保してるようです。
512÷2-1=255
forで繰り返すMid関数のスタート引数が1からのため配列の0番を1つ引算してまふ
「4D 54 68 64」ではなくてスペースなし「4D546864」か
Replace関数でスペースを削除しましょう
出来た文字列"4D546864"に対して
ループで前から2文字ずつ"&H"を付け足しているので
おそらく"&H4D&H54&H68&H64"が生成されるのでしょう

なので>>314のコードは全く意味がありません。

323:デフォルトの名無しさん (アウアウエー Sa13-c9t6)
20/07/08 06:49:42 yrsbI81qa.net
>>321> できれば、for next 構文はなしで

こんな縛りが無ければ普通にググって出てくるし以下で出来るだろうけど

複数のセルを選択する
URLリンク(officetanaka.net)

324:デフォルトの名無しさん
20/07/08 07:11:29.93 x0V53xaA0.net
つーかわざわざselectする意味あんの?

325:デフォルトの名無しさん
20/07/08 07:47:38.02 8s/zJrIHa.net
わからないで書いてたのか

326:デフォルトの名無しさん
20/07/08 07:58:30.68 krt5VVG+d.net
>>316
簡単だろw
Dim btByte() As Byte
Dim lngFN As Long
btByte(0)=&H4D
btByte(1)=&H54
btByte(2)=&H68
btByte(3)=&H54
btByte(4)=&H68
btByte(5)=&H64
lngFN=FreeFile
Open strPath For Binary As #lngFN
Put #lngFN, btByte
Close #lngFN


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch