Excel VBA 質問スレ Part48at TECH
Excel VBA 質問スレ Part48 - 暇つぶし2ch1:デフォルトの名無しさん
17/05/16 08:24:45.78 iIGA/64l0.net
!extend:checked:vvvvv:1000:512
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
スレリンク(tech板)
※関連スレ
VBAなんでも質問スレ Part2
スレリンク(tech板)
Access VBA 質問スレ Part1
スレリンク(tech板)
Excel総合相談所 125
スレリンク(bsoft板)
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

2:デフォルトの名無しさん
17/05/16 10:48:12.64 Gxqu5M/Va.net
前スレでScreenUpdating=Falseしない派いる?ってのがあったけど、コード書いてる時は基本しない。
あれで速くなったっていうのは基本コードが悪いだろ。

3:デフォルトの名無しさん
17/05/16 11:05:20.21 J7MMoyEGd.net
>>2
ScreebUpdating =False : 警告Off
ScreebUpdating =True : 警告On

4:デフォルトの名無しさん
17/05/16 11:06:03.77 J7MMoyEGd.net
連続typo失礼

5:デフォルトの名無しさん
17/05/16 11:08:01.35 l+zZTb7Y0.net
ScreenUpdatingの有無で速度が左右されるのは、セルに値を入れる等して描画に影響する操作をする場合だけだから、
結果を吐き出す際に一度だけしかセルにアクセスしないとかなら要らないね。

6:デフォルトの名無しさん
17/05/16 12:41:08.19 6Q26Nvh7r.net
>>5



7:\示の更新してんなら要るわ あとエクセルでセルに値を書き込むことを「吐き出す」と言うのは 素人が玄人の真似して訳もわからずそれっぽい言葉使ってみました感が強すぎる 分かる人が見ればコイツ馬鹿だなってバレバレだからやめた方がいいぞ



8:デフォルトの名無しさん
17/05/16 12:57:55.01 fevd2QwgM.net
自称玄人 w

9:デフォルトの名無しさん
17/05/16 13:01:13.42 J7MMoyEGd.net
つまり量によるわけだな。

10:デフォルトの名無しさん
17/05/16 13:03:31.49 J7MMoyEGd.net
つまり量によるわけだな。
ScreenUpdating = False しないと辛くなってきたら、それは
ワークシートで管理するデータや式が多くなりすぎたという警告とみなすスタイルが成り立つ。

11:デフォルトの名無しさん
17/05/16 14:23:33.68 Gxqu5M/Va.net
>>6
えっ?
素人玄人関係なく使うでしょ。
そんなの意識したこと無いぞ。
>>9
量なのかなあ。
そりゃいい加減にコード書くことも有るけど、そういう場合で遅く感じたらちゃんとしたコードに変更するだけだろ。
どうしても描画が何回か走ってチラつきを防止するために最後に追加するぐらいだな。

12:デフォルトの名無しさん
17/05/16 14:27:59.56 J7MMoyEGd.net
>>10
ちゃんとしたコードとは?
コードの問題ではなくてデータの問題だ、というのが俺の主張

13:デフォルトの名無しさん
17/05/16 14:53:18.62 Ilchk1CoH.net
不毛

14:デフォルトの名無しさん
17/05/16 14:57:07.86 l+zZTb7Y0.net
>>9
ワークシートから値を取り込んだり、値をワークシートに書き出したりっていう処理は、
Rangeを使えば一括して行うことが出来るので、データ量はそこまで問題にならない。
どちらかというと罫線、色、数式みたいな一括処理しづらいものが問題で、
ScreenUpdating次第で処理に大きく差が出る。
こういったものは保守も面倒なので手作業で代替出来ないかとか考えるといいかもね。

15:デフォルトの名無しさん
17/05/16 15:11:19.05 tw+4NZDm0.net
オートフィルタかけた後のデータの、特定の1列だけを配列に格納したいのですが、何かいい方法はないでしょうか

16:デフォルトの名無しさん
17/05/16 16:37:32.48 l+zZTb7Y0.net
>>14
SpecialCells(xlCellTypeVisible)で可視状態にあるセルだけを取り出せる。

17:デフォルトの名無しさん
17/05/16 19:14:29.63 iIGA/64l0.net
クラスモジュールって使いますか?
大抵のことはfornext、foreachで済んでしまうのですが、vbaでクラスを使ったほうが便利なのでしょうか

18:デフォルトの名無しさん
17/05/16 19:31:35.09 qhacRso4p.net
>>16
必要かどうかってことなら必要ない
でも大がかりなの作るなら使って整理したほうがやりやすいんじゃないのかな
for文と比較する感覚がいまいち伝わってないから的はずれならごめんなさい
関数とか配列とかと比較するならわからなくもないんだけれど

19:デフォルトの名無しさん
17/05/16 19:45:30.76 iIGA/64l0.net
>>17
私が使うのは事務処理で、表を作ったり、リネームする時にマクロを使う程度なのです
クラスはあんまり必要無さそうですね、ありがとうございました

20:デフォルトの名無しさん
17/05/16 19:48:36.06 YL1OfOAE0.net
>>10
悪いけど素人しか使わんわそんな恥ずかしい言い方w

21:デフォルトの名無しさん
17/05/16 19:53:23.03 Y/+V2TLHM.net
言い方はどーだっていいんだよ
伝われば

22:デフォルトの名無しさん
17/05/16 20:28:49.31 rEbfD8DUa.net
>>13
うん、罫線とかはしようが無いね。
でも罫線もマクロ記録のままの酷いコード書く人もいる。
データについては1つ1つのセルに値を入れるなんてことはすべきじゃない。
普通は1つの表で一括入力でしょ。
どうしても速度を出したい時は汚くなるけどシート内データ全部を一括入力にする。
あとは、使える場面が限定されるけどマルチプロセスにするとか。
>>18
クラスを使う場面ってのは慣れてれば感覚的にぴったりくる。
オブジェクト指向的にぴったりくる場合。
でも、他のメンバーが慣れて無いと却って良くない場合もあるね。

23:デフォルトの名無しさん
17/05/16 21:04:28.77 ORpNRMoi0.net
Dim スコーン As New Class
↑このスコーン自体を引数に使うことは出来ますか?
スコーン.Name =

24:デフォルトの名無しさん
17/05/16 21:05:07.95 ORpNRMoi0.net
スコーン.Name = "スコーン" とか書きたんくないですんけど。

25:デフォルトの名無しさん
17/05/16 21:12:00.81 qp8pXuJpx.net
>>22
出来るよ。
そうしたい目的はなに?

26:デフォルトの名無しさん
17/05/16 21:38:51.33 ORpNRMoi0.net
>>24
>>23だと、スコーンの名前はスコーンとか言ってるようなものじゃないですか。
何か変なので、どうにかしたほうがいいなと。

27:デフォルトの名無しさん
17/05/16 21:44:47.11 FLRqiZ6lx.net
>>25
引数にしたいことと
nameに代入することの関係性が分からない。
まぁ宣言をお菓子にしとけばいいんでない。

28:デフォルトの名無しさん
17/05/16 21:48:13.03 iIGA/64l0.net
PHPならget_class()なんてそのまんまなものがあるんだけどね
vbaには無いっぽいな

29:デフォルトの名無しさん
17/05/16 21:54:30.99 YL1OfOAE0.net
>>25
あーあ、やっちゃったね
質問するにもマナーってものがあるんだよ
スレを荒ららない為にもこの際覚えておけ
「目的を聞くやつにレスを返してはいけない」

30:デフォルトの名無しさん
17/05/16 21:59:56.08 wnIq1TKW0.net
そんな法則は聞かないな

31:デフォルトの名無しさん
17/05/16 22:19:15.46 FLRqiZ6lx.net
>>28
いつかそのマナー広まるといいね!
影でこっそり応援してぬわ。

32:デフォルトの名無しさん
17/05/16 22:30:24.74 H5+sVhHM0.net
なんで目的を聞くやつにレスを返してはいけないの?
質問の意図を汲もうとしているかもよ?

33:デフォルトの名無しさん
17/05/16 22:33:38.25 FLRqiZ6lx.net
>>31
その聞き方だと件の>>28は返事出来ないよ。
理由は察してあげて

34:デフォルトの名無しさん
17/05/16 22:35:06.66 iIGA/64l0.net
>>26
クラス名で分岐させたいパターンがある
ゲームプログラムだとclass名で敵か味方か判別する、というのは見たことがあるな
せめて継承でもできればその辺共通化できるんだけど、そこはvba。めんどくさい
しかしエクセルだとどういう状況か思い浮かばない
>>30
してなくて草

35:デフォルトの名無しさん
17/05/16 22:44:02.80 YL1OfOAE0.net
>>31
質問の意図が分からん奴は質問に答えられない
目的を聞いても質問者の意図を引きだす事はできない
簡単な事だ

36:デフォルトの名無しさん
17/05/16 22:49:11.64 FLRqiZ6lx.net
>>34
なるほど。
素晴らしいね。
がんばれー

37:デフォルトの名無しさん
17/05/17 00:01:38.90 qRwApybV0.net
>>33
制御の向きが逆だよなあ

38:デフォルトの名無しさん
17/05/17 00:23:20.25 sfPoWe8nx.net
TypeName関数で自作クラス名って取り出せないんだっけ?

39:デフォルトの名無しさん
17/05/17 00:32:2


40:2.34 ID:9uxtifvV0.net



41:デフォルトの名無しさん
17/05/17 00:39:06.93 dws00LGS0.net
クラス内部で つかうんなら
これじゃいかんのか?
Debug.Print TypeName(Me)

42:デフォルトの名無しさん
17/05/17 00:45:43.01 9uxtifvV0.net
>>39
すまん、いけた
解決!
標準モジュール
Sub foo()
Set bar = New Class1
Debug.Print bar.get_name()
End Sub
'クラスモジュール
Public name
Private Sub Class_Initialize()
name = TypeName(Me)
End Sub
Function get_name()
Debug.Print Me.name
End Function

43:デフォルトの名無しさん
17/05/17 00:51:22.92 sfPoWe8nx.net
解決やな

44:デフォルトの名無しさん
17/05/17 17:27:48.02 mwqvXh9q0.net
>>39
>>40
ありがとうございます。
それで名前があるものに名前を付けなくて済みます。

45:デフォルトの名無しさん
17/05/17 17:53:56.84 GJ9WSlKVH.net
>>40
そのコード、
Sub foo()
  Set bar = New Class1
  Debug.Print TypeName(bar)
End Sub
と同じじゃないの?
>>33
> せめて継承でもできればその辺共通化できるんだけど、そこはvba。めんどくさい
VBEのオブジェクトコンボボックスとプロシージャコンボボックスを選択すれば、
コードを自動生成してくれるから、全然めんどくさくないよ。

46:デフォルトの名無しさん
17/05/17 20:29:29.04 G7cUCqPy0.net
俺は今重要な判断を下した
お前らは事務のねーちゃんよりスキルが低い
少なくともうちの事務のねーちゃんより低い事は確実だ

47:デフォルトの名無しさん
17/05/17 21:05:07.82 9uxtifvV0.net
>>44
お前、レスもらうのめっちゃうまいなw
思わず反論しそうになった
2chでレスをもらう能力、俺は敬意を表するよ
もしよければ、年齢と性別、職業を教えてほしい。どんな人か本気で気になる

48:デフォルトの名無しさん
17/05/18 06:43:55.44 PgOUGGac0.net
24歳

マイクロソフトジャパン勤務

49:デフォルトの名無しさん
17/05/18 08:36:51.83 7Fv0UmYNx.net
>>46
悪くないよ。
なんつーかコウウン

50:デフォルトの名無しさん
17/05/18 14:52:51.70 5nCvEgDF0.net
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1"
If Not IsNumeric(Target.Value) Or Target.Value = "" Then
Exit Sub
Range("B1:B9").Copy Range("B2")
Range("B1").Value = Range("A1").Value
Target.Select
End Select
End Sub
このコードの意味教えてくださいー

51:デフォルトの名無しさん
17/05/18 15:34:33.70 ZtOQ2Qac0.net
まずは実行してみたらどうだ

52:デフォルトの名無しさん
17/05/18 17:11:10.34 d+oDyp660.net
Private Sub Worksheet_Change(ByVal Target As Range)
ここに、Subの処理を定義する
End Sub
Select Case Target.Address
ここに、Caseの処理を定義する
End Select
Select Case Target.Address
// Target.Address が、"$A$1"なら
Case "$A$1"
// Target.Value が数値ではない、または、空文字列なら、Subを抜ける
If Not IsNumeric(Target.Value) Or Target.Value = "" Then
Exit Sub
// copy
Range("B1:B9").Copy Range("B2")
// 代入
Range("B1").Value = Range("A1").Value
// 選択?
Target.Select
End Select

53:デフォルトの名無しさん
17/05/18 19:06:48.56 hKe3x/Mw0.net
>>48
ugokanai kedo
A1セルの中身が数字に変わった場合、
B1:B9をB2:B10にコピーペースト
B1をA1の内容にする

54:デフォルトの名無しさん
17/05/18 19:21:07.71 f5T5khCgr.net
>>51
A1を選択
が抜けてる

55:デフォルトの名無しさん
17/05/18 22:27:14.87 EwzTzSyyM.net
マウスポインターの移動量かマウスのスクロール量を検知って出来ますか?

56:デフォルトの名無しさん
2017/05/1


57:8(木) 23:31:41.56 ID:fbyfCIXE0.net



58:デフォルトの名無しさん
17/05/19 12:10:12.11 Hh88K1uA0.net
最新版のExcelで、ファイルを開いた直後にだけコンパイルエラーが出るようになったから絶対更新しないほうがいいぞ
エラーが出るのは
Function ProcName(cel As Range) As Double
とか、パラメータにAs Rangeを持つところみたいで
一応As Objectに変えてしまえば通るけど、治すの大変だ・・・

59:デフォルトの名無しさん
17/05/19 12:26:18.38 Hh88K1uA0.net
関連してそうな情報を発見
URLリンク(blogs.msdn.microsoft.com)
とうとう本気で.xls形式を殺しに来たか

60:デフォルトの名無しさん
17/05/19 12:27:06.53 OupscBB+0.net
>>55
なんていうか、まあ頑張れ

61:デフォルトの名無しさん
17/05/19 12:49:41.54 P+QgsC3b0.net
俺のInsider slow バージョン 1704(ビルド8067.2115)では
>>55の情報だけを たよりにやって みたけど 問題ない (xls,xlsm 両方)
とだけ言っておく

62:デフォルトの名無しさん
17/05/19 13:13:31.21 Hh88K1uA0.net
>>58
すまない。新規ブックでは検証していなかった。
問題無いことを確認
14.0.718.5000
16.0.7927.1024
コンパイルエラーを確認
15.0.4927.1002
16.0.8067.2115
なので、>>58の環境でも発生すると思う。
新規ブックで、
Module1に
Function ProcName(cel As Range) As Double
ProcName = cel.Value
End Function
Sub btn_Click()
MsgBox "click"
End Sub
を書いて、ブック上のシェイプのマクロにbtn_Click()を割り当てるとファイルを開いた瞬間にだけコンパイルエラーが起こるよ
上記URLによれば、モジュール範囲の定義なら起こるらしいので
Private 変数 As Workbook
Sub btn_Click()
MsgBox "click"
End Sub
でもダメぽ
解決策はAs Objectとするか、モジュールを切り分けるしかない。

63:デフォルトの名無しさん
17/05/19 13:33:37.37 P+QgsC3b0.net
>>59
なるほどね
少なくとも 俺の環境下では >>59の条件で xls のみだな その現象が発生するのは
xlsmは 問題ない
つかもう excel2003までのexcel形式(xls)使うのやめたら? と思うのだけど?

64:デフォルトの名無しさん
17/05/19 13:52:53.66 Hh88K1uA0.net
>>60
全くもって仰る通り。
以前から.xlsmへの切り替えを勧めているが、なかなか全てを切り替えられなくてね。
各個人に持たせているファイルを差し替えろって言ってもメール無視されるし。
あと単純に.xlsmに変えてしまうと
・他のシステムが対応していないせいでxlsしか使えない。
・表の最大値が大きくなったお陰で、既存のマクロだと末端の列列まで処理するループが混ざっていて永久に処理が終わらない。
  (そのくらいマクロ直せよ・・)
・ブックのリンクが貼ってあるせいで過去のエクセルファイル全てのリンクを修復しないといけない。
  (作ったやつ誰だよ・・)
・データサイズの大きい「共有ブック」をxlsmに変えるととてつもなく重くなる。
  (データとマクロ分離しろよ・・)
とか様々な理由があって切り替えが終わってない。
ツッコミどころ満載やで。

65:デフォルトの名無しさん
17/05/19 13:56:26.64 P+QgsC3b0.net
いい 切り替えの機会じゃん
xlsは もうまともに 使えません(キリッ

・・・・と言えたらいいねw

66:デフォルトの名無しさん
17/05/19 22:44:50.72 ELP3hVnQ0.net
変数宣言を一番上に書くと、
確認する時、スクロールで戻るのが面倒なんですが、
Excelなのに、上の方の画面を固定出来るという発想は無かったのでしょうか。
Excelなのに。

67:デフォルトの名無しさん
17/05/19 23:07:15.86 HsQ+il8a0.net
そんなことより行番号表示かと。

68:デフォルトの名無しさん
17/05/19 23:10:43.79 1s7BLiGf0.net
グローバルで別のモジュールに書いてウィンドウを並べるとか

69:デフォルトの名無しさん
17/05/19 23:27:00.50 vYjNISl1x.net
Excel VBAしかやったことない人が何だか勘違いしてるようだがそもそもVBEはExcelの機能ではないぞ

70:デフォルトの名無しさん
17/05/19 23:34:30.47 vnM/uOfn0.net
>>63
> 変数宣言を一番上に書くと、
必要な所に書けばいいやん
って言うかスクロールが面倒なほどでかい関数とか書くなよ

71:デフォルトの名無しさん
17/05/19 23:42:30.09 FnbaGtrQ0.net
>>63
確認する時って
変数の何を確認するの?

72:デフォルトの名無しさん
17/05/19 23:49:13.07 ELP3hVnQ0.net
>>68
poって何の変数だっけ?
みたいな。

73:デフォルトの名無しさん
17/05/19 23:52:43.48 FnbaGtrQ0.net
>>69
何の変数ってのがよく分からんのだけど、
Dim Example As Long: Example = 1
みたいに宣言と代入を上の方でしてるって話?
ローカルウインドウとかその他機能でなんとかならんの?

74:デフォルトの名無しさん
17/05/19 23:54:11.19 1s7BLiGf0.net
中身のわからない変数名を付けるからそんなアホな事をせにゃならんようになるんだ
似たような変数名が多すぎてややこしいならfunctionに分ける等、予め余計な手間が発生しないようにするんだ

75:デフォルトの名無しさん
17/05/19 23:59:18.39 dZkjjWfrx.net
>>63
書かなきゃよい

76:デフォルトの名無しさん
17/05/20 00:21:30.52 foz/Iffu0.net
ネタだよな
コードウィンドウ分割するだけじゃねえのって思っちゃったけど
URLリンク(i.imgur.com)

77:デフォルトの名無しさん
17/05/20 08:57:37.77 k9L+DwNA0.net
>>63は赤の他人が書いたクソ長いコードを解析させられている気の毒な人だ
と好意的に解釈しておこう

78:デフォルトの名無しさん
17/05/20 09:20:18.91 5sPtJFYn0.net
hoge param1:=xxx, param2:=yyy みたいな書き方に慣れないんですが
dummy = hoge(xxx, yyy) とかではダメな理由ってあるんでしょうか?

79:デフォルトの名無しさん
17/05/20 09:33:47.65 TX7Bd0Me0.net
>>75
別にどっちでもいい。好み
ファイルの保存なんかもこの方が見やすいと思う
例えば保存時で比べる
ファイル形式を定数で打つと分かり辛い
Thisworkbook.SaveAs("C:\foo",43)
こう書けばフォーマットなんだな、ということが見てすぐにわかると思う
Thisworkbook.SaveAs Filename:="C:\foo",FileFormat:="43"
本当はこの方が良いけどね
Thisworkbook.SaveAs Filename:="C:\foo",FileFormat:="xlExcel9795"
他にも引数が大量にあるときやパラメータが複雑な時にわかりやすい。以下は見辛い
dummy = hoge(xxx, , , yyy, , ,zzz)
逆にsum()を
sum arg1:=xxx, arg2:=yyy
なんてすると読みづらいだけになる
と言ってる俺も保存の時ぐらいにしか使わないけどね

80:デフォルトの名無しさん
17/05/20 09:53:58.83 5sPtJFYn0.net
ありがとうございます
事務仕事でExcelVBAをいじる必要があったんだけど
大昔の非構造化BASICやFORTRAN、Cなどの印象しかないので最近の言語は抽象的すぎて分かりにくい

81:デフォルトの名無しさん
17/05/20 10:13:55.47 I6OViHCS0.net
>>75
その名前じゃあまりメリットないけど引数の名前をちゃんとつけてたら分かりやすい
あと引数がたくさんある場合に後ろの方の引数を指定したい時とか
Workbook.Open FileName:="test.xlsx", AddToMru:=True

82:デフォルトの名無しさん
17/05/20 10:29:20.36 0mLljkpvd.net
>>77
大昔のCって関数と最初の { の間に変数宣言するようなやつ?

83:デフォルトの名無しさん
17/05/20 10:44:25.75 5sPtJFYn0.net
>>79
そんなやつ、カーニハンとリッチーの第1版、白いカバーの表紙のやつ

84:デフォルトの名無しさん
17/05/20 10:50:27.63 5sPtJFYn0.net
変数を宣言しただけでは領域が確保されず
値を代入しただけでプログラムが暴走するんだけど原因に思い当たらず3日間悩んだ挙句に挫折した

85:デフォルトの名無しさん
17/05/20 10:54:07.27 TX7Bd0Me0.net
>>81
上で見たけど、vbaは内部的にかなり変な挙動をしている
newの時点ではメモリ領域は確保されず、初めてプロパティやメソッドにアクセスした段階でメモリ領域が確保される
また、
set foo = thisworkbook
set bar = thisworkbook
は、foo == barに「ならない」
fooとbarは常に違う参照が生成されるので、別扱いとなる
そのコードを教えてくれれば問題解決できると思う
というか後学のためにも見てみたい

86:デフォルトの名無しさん
17/05/20 10:54:21.25 TX7Bd0Me0.net
newじゃないや、setか

87:デフォルトの名無しさん
17/05/20 11:19:48.33 nyexelOB0.net
日本語も変数として使えるからわかりやすい名前つければいい

88:デフォルトの名無しさん
17/05/20 11:57:41.20 w41RCx9Yp.net
日本語は好き嫌い分かれるからなあ
俺は日本語が見易いけどさ

89:デフォルトの名無しさん
17/05/20 11:59:34.10 TX7Bd0Me0.net
google翻訳しながら英語変数使うぐらいなら、日本語使ったほうが絶対に良い

90:デフォルトの名無しさん
17/05/20 13:11:22.41 DWQm6waj0.net
Visual Basic Edtor って、単体じゃ入手できないよな?
しかもExcelのバージョン違えば使い物にならんヶ所出てくるし
ThisWorkbook だって、どの?に成るだろうし
Microsoft Script Editer じゃあるまいし、どう考えてもExcelの付属品っつー立ち位置だろ
Excelの「おまけ」機能に決定
Word とか Outlook とかバリエーションは在るにしても

91:デフォルトの名無しさん
17/05/20 13:21:20.46 9VI8goCbM.net
根本的に勘違いしててワロタw

92:デフォルトの名無しさん
17/05/20 15:37:38.60 VKPh1Lah0.net
>>73
>>63じゃないけど、これ知らんかったわ

93:デフォルトの名無しさん
17/05/20 18:04:39.38 yKxdvQKVr.net
無知って凄いね
感心した

94:デフォルトの名無しさん
17/05/20 18:24:24.01 KHEwJCpd0.net
>>63
C#とかVB.netでアドイン作ればOK。
VBAでもセキュリティに問題出るけど作ることは可能。

95:デフォルトの名無しさん
17/05/20 18:58:10.02 E4Y


96:2PkRr0.net



97:デフォルトの名無しさん
17/05/20 19:08:49.87 KHEwJCpd0.net
>>92
どう思うって、どういう意味?
別に何とも思わんが。

98:デフォルトの名無しさん
17/05/20 19:16:24.30 E4Y2PkRr0.net
>>93
前スレ478さんが、VBAでSQLは鬼門って書き込みしてるのを覚えてたもんで、苦労するシステム構成なのかなぁと
Excel VBAの質問じゃないからスレチでしたかね、すんません

99:デフォルトの名無しさん
17/05/20 19:18:51.52 bcgPDffLp.net
>>92
良いんじゃね

100:デフォルトの名無しさん
17/05/20 19:51:15.58 nuBqrdCz0.net



101:苦労するかどうか、VBA以外にもSQL知っておかないといけないような気もするけど…



102:デフォルトの名無しさん
17/05/20 20:11:15.06 SOOWfvsE0.net
なんでVBAでSQLが鬼門なのか、理由とかあるの?

103:デフォルトの名無しさん
17/05/20 21:48:00.24 ZQ24XbJz0.net
Accessと連携なら、問題ないんじゃ…。
単体だと、更新処理系が面倒。
参照だけなら大差ないと思う。

104:デフォルトの名無しさん
17/05/20 22:03:15.15 SOOWfvsE0.net
ExcelVBAとAccessVBAでSQLの構文に違いがあると言いたいの??

105:デフォルトの名無しさん
17/05/20 22:25:58.77 TX7Bd0Me0.net
>>97
やったらわかる
phpでsqlは黄金パターンでうまくいく。db設計もいつも通り。文字コードはutf8
エラー処理も死ぬほどある

C#やVBはかなりめんどくさい、というよりもそもそも使う必要がかったので、前任者の引き継ぎが非常にだるい
つまずく場面としては、具体的には文字コード。shift-jisだと最悪。また、db設計が適当
db接続も何かうまくいかない

106:デフォルトの名無しさん
17/05/20 23:25:01.03 SOOWfvsE0.net
>>100
要するにお前のスキルが低すぎてVBA程度もロクに使いこなせない、としか理解できない内容だな

107:デフォルトの名無しさん
17/05/20 23:32:49.13 RVvLdbs7x.net
>>100
その差が大きいとは思えないけど。
vbaでもutf8扱えるよ。
接続はodbcで繋がる。

108:デフォルトの名無しさん
17/05/20 23:35:59.38 S4VyllBW0.net
ODBC=おでぶちゃん

109:デフォルトの名無しさん
17/05/21 00:10:42.76 iEpK3Njn0.net
>>99
SQLのUpdate、Delete、Replaceが駄目。
Excel側のRows().Deleteとか、Replace使えばいいだろって?
遅くないですか、それ。

110:デフォルトの名無しさん
17/05/21 00:16:44.29 o4hB34de0.net
それはVBAじゃなくてオラクルの問題なんじゃないのか?

111:デフォルトの名無しさん
17/05/21 00:22:22.71 o4hB34de0.net
>>105
どこからオラクルが出てきた!?

112:デフォルトの名無しさん
17/05/21 03:17:25.81 GlMb9Muz0.net
>>100
君なあ、能力の問題なのか性格の問題なのか分からんが説明が足らんのだよ。
ExcelからDAOを使うかADOを使うかによって変わるのは当然のことだし、ExcelとAccessでどうとか言われてもどういう観点の話か分からんだろ。

113:デフォルトの名無しさん
17/05/21 03:20:01.97 GlMb9Muz0.net
というか、文字コードの話が出てくるってことはODBCとかドライバの話まで出てくるじゃねーか。
それじゃあ違って当然だ。

114:デフォルトの名無しさん
17/05/21 07:08:05.80 S79+g3VB0.net
質問させてください。
excelからoutlook起動させてメールを作成するマクロ作ってます。
数パターン用意したテンプレートに任意の文言を置換・挿入してoutlookに渡す?感じです。
動作自体はうまくいってるんですが、なぜかoutlookに渡した本文の文字サイズが12ptになってしまいます。
outlookのデフォルトの文字サイズは10ptだし、12ptになる理由が全く想像つきません...
漠然とした質問で申し訳ないですが、outlook側で設定したデフォルトの文字サイズでメールを作成するようにできないでしょうか?
初心者なので、的はずれなこと言ってたらごめんなさい。

115:デフォルトの名無しさん
17/05/21 07:40:39.09 DM2pkhyK0.net
>>109
とりあえずぱっと思いつく原因は、エクセル側が12ptなのでそれがoutlook側に渡っている気がする
テキストだけ渡すようにするか、エクセル側を一時的に10ptにしてメール作成後に12ptに戻すとかで対処できるかもしれない
全然違うかもしれない。コードを見せてもらえたら試してみるよ

116:デフォルトの名無しさん
17/05/21 08:14:42.08 1Ubd4ETn0.net
>>97
>>104 とかの話でシートを SQL で操作する話を言ってるんだろ
あと >>100 は単にディスりたいだけ
PHP だといつも通りの DB 設計が


117: VB/C# だと DB の設計が適当とか C# に挫折した底辺 PHPer の煽りだろ



118:デフォルトの名無しさん
17/05/21 09:34:47.94 bvqoufgo0.net
しかしなんで今どきAccessなんか使うんだろ。
SQL Server簡単だよ。Management Studio使いやすいし。

119:デフォルトの名無しさん
17/05/21 09:46:01.40 76EOq35R0.net
事務的な作業ならAccessで十分だからだろうな。
というかローカルで使えるDBソフトってAccess以外にあんのかな。

120:デフォルトの名無しさん
17/05/21 10:23:28.85 1Ubd4ETn0.net
>>112
DBMS だけじゃなくてレポート機能とかが欲しいんだろ
>>113
localhost で使えばどんなデータベースもローカルで使えるけど?
サーバーを立てたくないと言うなら sqlite とか
SQL-Server Compact Edition が見捨てられつつあるのが残念

121:デフォルトの名無しさん
17/05/21 11:05:17.83 DM2pkhyK0.net
使える人が多いってのは会社では非常に大きなメリット
桐ってソフトを使ってたけど、使える人が少なすぎてaccessに変えることになった
そしてword、てめーはダメだ

122:デフォルトの名無しさん
17/05/21 11:48:21.26 S79+g3VB0.net
>>110
レスありがとうございます。
excel側の文字サイズは10ptなので、ご指摘の原因ではなさそうです。
恥ずかしいですが、ファイルをアップロードしました。
ダウンロードキーは「excel」です。
URLリンク(www.axfc.net)
実行ボタンを押すと、outlookが起動されてメールが作成されます。
ご確認お願いします。

123:デフォルトの名無しさん
17/05/21 14:13:30.87 /uUqSVmCx.net
>>113
発想が貧困過ぎて草

124:デフォルトの名無しさん
17/05/21 14:33:37.38 DM2pkhyK0.net
>>116
さっぱり分からん。なんか挙動がバグくさい
エクセルvbaからメールを作るとフォルトで12pxになるようだ。これは仕様と捉えていいと思う
で、解決方法としてはこう
<body>タグにインラインcssを設定する
Sub msg2olapp()
'''Outlookでメール作成
Set mail_item = olapp.CreateItem(0)
mail_item.To = toadd 'To
mail_item.Cc = ccadd 'Cc
mail_item.subject = mailsub '件名
mail_item.body = mailbody '本文
mail_item.htmlbody = Replace(mail_item.htmlbody, "<BODY>", "<body style=""font-size:13px"">")
mail_item.Display '表示
End Sub
インラインcssで設定したフォントサイズは何故か3/4になる。理由も意味もわからんが、ゲイツの趣味かなんかだろう
深く考えずに10pxの4/3、つまり13pxでインラインcssを指定する。こうすれば10pxのフォントサイズになる

125:デフォルトの名無しさん
17/05/21 17:02:34.86 S79+g3VB0.net
>>118
ありがとうございます。
望み通りの動作しました。
ちなみに、自分の環境では13pxだと6.5ptになってしまいました。(1/2になる?)
あと、>>116で作成したメールのタグを見てみたんですが、「p.MsoNormal...」ってとこのfont-sizeが12ptになっていて、そこを10ptに変更するとうまく表示されるようになるようです。

126:デフォルトの名無しさん
17/05/21 18:41:32.83 Ox0ZLs5T0.net
いまだにptとpx違いがわからない人っているんだね勉強になる

127:デフォルトの名無しさん
17/05/21 18:46:19.26 DM2pkhyK0.net
>>120
ありがとう本当に気づかなかった
web触ってるとptって単位は記憶から抹消されるわ

128:デフォルトの名無しさん
17/05/21 23:02:22.04 +shsKnP00.net
データベースとの接続処理で一つ教えてください
Sub test()
Dim wkR As New ADODB.Recordset

S_RecordsetClose (wkR)
End Sub
レコードセットのcloseとnothingの処理を一つにまとめようとしたんですが、
型が一致しません   と S_RecordsetClose (wkR) のところでエラーになります
Debug.Print TypeName(wkR) で見たら当然(だと思うんですが)Recordsetに
なってるんで、なんでこれで型の不一致になるんです?
ちなみに S_RecordsetClose に書いた処理は↓です
Sub S_RecordsetClose(ByVal rec As Recordset)
rec.Close
Set rec = Nothing
End Sub

129:デフォルトの名無しさん
17/05/21 23:12:50.81 bvqoufgo0.net
>>122
テキトーに答えるけどByValで受け取った変数に
Set rec = Nothing
しても意味ないと思う

130:デフォルトの名無しさん
17/05/21 23:25:21.22 aKuhNyUq0.net
>>122
型の不一致の根本原因は (wkR) だと思われ
S_RecordsetClose wkR

Call S_RecordsetClose(wkR)
にしる

131:デフォルトの名無しさん
17/05/21 23:26:47.02 +shsKnP00.net
>>123
あ、、、、言われたらそうだ^^;。
それは確かにその通りで、この処理自体の問題だとは思うのですが、引数を受け取る段階で型が一致しないのはどうして?
ちなみにByRefでも同じなんですが。

132:デフォルトの名無しさん
17/05/21 23:34:14.77 +shsKnP00.net
>>124
リロってなかった
Call S_RecordsetClose(wkR)
でかつByRefにしました。
ありがとです。
動作についていまいちよく判ってないっす^^;

133:デフォルトの名無しさん
17/05/22 00:57:19.08 MyMt2epv0.net
>>122
ADODB.Recordsetと、Recordsetの違いじゃないの?
Recordsetって複数あるから省略しちゃうとどれ指してるか分からなくなるぞ。

134:デフォルトの名無しさん
17/05/22 12:17:47.19 0dv64TbrM.net
質問ですがVBAのプロパティやメソッドの扱い方について詳しい入門書はありませんか?
会社でマクロ使うため超入門(マクロの記録からつかうやつ)と学校で教わったプログラム知識(basicとc++)でなんとかやってるんですがやはりVBAの命令の扱い方が怪しく…
予算は2~3千円程度でお願いします

135:デフォルトの名無しさん
17/05/22 12:26:52.79 csbpN2HFr.net
>>128
ExcelとAccessのVBAの本なら腐るほどあるからここで聞かなくてもググれば良い
Word、Outlook、PowerPointのVBAとなると日本語ではかなり少なくなるので教えるまでもなくググれば出てくる
ググって出てこないなら英語書籍やネットブログを漁るか、MSDNを直接参照することになるね

136:デフォルトの名無しさん
17/05/22 12:56:42.47 AKn80VTzp.net
>>128
vbeでF2キー

137:デフォルトの名無しさん
17/05/22 13:29:08.29 o9BH+SoNH.net
>>128
メソッドやプロパティの方から網羅的に学習するのはきついので、やりたいことの方から網羅的に
説明してる本の方がいいと思う。
たとえば、
『Excel VBA逆引き辞典パーフェクト』
URLリンク(www.shoeisha.co.jp)
似たような『○○700』みたいなのがいくつかあるから、どれか選んで流し見するのがいいと思う。

138:デフォルトの名無しさん
17/05/22 14:44:41.19 nSxPTPKq0.net
本なんて必要か?
多少の英語カがあればインテリセンスの中からそれっぽいもの選んで実験+Web検索で十分だろ。
あとは、インタフェースへのセンス(絶対この場合だったらこんなプロパティがある筈という嗅覚)とかね。
初心者だったら以下に気を付けてコード書くと良い。
・マクロ記録したらコードの中で必要無い部分をとことん削るのが常識と考えよう。
・それで動作確認して問題無いことを確めよう。
・削って問題無いと思っても、その場では問題無くても場合により問題出ることあるから削って残った部分をWeb検索で皆はどうしてるのかを確認しておこう。
・英語的にそのコードの意味を考えよう。
'A1を選択
Range("A1").Select
'選択したものの値を1にする
Selection.Value=1
だったら当然
'A1の値を1にする
Range("A1").Value=1
ということになる。

139:デフォルトの名無しさん
17/05/22 15:17:01.68 o9BH+SoNH.net
>>132
そんな無駄な試行錯誤や調査を、たかだか2,3000円の本を読むだけで省略できるんだが。
入門書とか馬鹿にする人いるけど、たいてい>>132みたいな感じだね。

140:デフォルトの名無しさん
17/05/22 15:42:03.39 W5+S3ypfM.net
>>132
デジタルに調べる良さとアナログに調べる良さは別物だよ
アナログだと「調べるつもりもなかったけどたまたま見かけて使ってみたらいい感じになった」ってことはアナログならでは

141:デフォルトの名無しさん
17/05/22 15:47:18.44 0dv64TbrM.net
色々意見ありがとうございます
うちの会社ネット禁止なので本に頼るしかない事情があるのです…
ネット可ならネット検索でやりたいのが本音です

142:デフォルトの名無しさん
17/05/22 16:20:04.11 yUPIrMPGd.net
>>135
開発環境だけでなくどこからもネットに繋がらないというなら会社に文句をいうべき
煽りではなく

143:デフォルトの名無しさん
17/05/22 18:00:49.91 AKn80VTzp.net
>>133
その試行錯誤が無駄かどうか長期的に考えれば分からない

144:デフォルトの名無しさん
17/05/22 18:15:29.31 MyMt2epv0.net
業務なのか自主的なのかで話が変わってくると思うけど、
VBAいじるのにネット無しは辛いなぁ。

145:デフォルトの名無しさん
17/05/22 18:29:46.83 o9BH+SoNH.net
>>137
書籍で基本的な知識を学んだ後でも、試行錯誤はするでしょ。
その試行錯誤には意味がなく、>>132のような試行錯誤には意味があるという主張?
だとしたら、それは自分で勝手にやってくださいと言うしか。

146:デフォルトの名無しさん
17/05/22 18:56:05.69 pWkjNq5k0.net
おおむかしは、FAXでMicrosoftから資料を引き出していたものじゃ
先ず、目次を引っ張れるFAX番号に掛けて、延々何十枚もの目次をげっと
その目次から欲しい機能を探し出し、今度は欲しい機能のFAX番号へ掛けて
これまた延々と資料を文字通り引きずり出しておったわ
よく覚えてないけど、そんなかんじ
その頃のFAXはB4の感光紙で、うっかり陽の当たるところに置きっぱで
外出したりすると、帰社した時には真っ黒くろすけで愕然と膝から頽れたり

147:デフォルトの名無しさん
17/05/22 19:18:46.60 g3oHLvAy0.net
>>135
検索できるPCを用意してもらったほうが良い。もしくは自分で用意するか
ネットでその都度検索できないとあまりに効率が悪い

148:デフォルトの名無しさん
17/05/22 19:45:17.11 ewHRkUXfd.net
>>136
金融じゃ普通だぞ
いちいちググらないとコード書けないやつはお呼びじゃない

149:デフォルトの名無しさん
17/05/22 20:10:34.61 3QNKGHFQ0.net
>>142
金融案件みたいなデスマーチの温床に言われてもww

150:デフォルトの名無しさん
17/05/22 20:13:17.75 g3oHLvAy0.net
>>142
金融業界にvbaでセコセコやってるやつなんでいねーよwww
帳票システムは全部外注、ボタンひとつで出るようになってるんだよwww
しかもエクセルよりアクセスの方が使用頻度が高い
岡三証券とかは知らんけど

151:デフォルトの名無しさん
17/05/22 20:44:19.38 rXkCxzW60.net
なんかさあ…もう少しオープンに自分の無知をさらけ出そうぜ
無知ってそんなに悪いもんじゃないぜ?

152:デフォルトの名無しさん
17/05/22 21:21:30.49 yUPIrMPGd.net
>>142
金融でもいわゆるOA環境は与えられててネットは見れるだろ

153:デフォルトの名無しさん
17/05/22 23:25:21.82 KgZfg/yx0.net
>>139
どっちの試行錯誤も意味があるんじゃね
試行錯誤が無駄といったのはそっち

154:デフォルトの名無しさん
17/05/22 23:36:28.18 fGR6ky/u0.net
空白と重複をなくしたドロップダウンリストを作成したいんだけど、作業列つくらないと厳しいですか?
A列に重複がたくさんあるものから、重複を削除したリストをB2に追加したいですが、VBAでは厳しいですか?

155:デフォルトの名無しさん
17/05/22 23:39:29.41 W5+S3ypfM.net
>>148
繰り返しとifでいける

156:デフォルトの名無しさん
17/05/22 23:41:44.53 EzxM7okx0.net
vba使い始めた頃はヘルプに結構お世話になったけどなあ
最近のバージョンだとオフラインのヘルプが入ってないからきついよね
>>128のバージョンもダメなやつなのかな

157:デフォルトの名無しさん
17/05/22 23:43:11.76 fGR6ky/u0.net
>>149
ループでリストってできるんですか!!知りませんでした。
例えば1~"A1に入力された数字"までのリストとかも可能ですか??
A1に20とあった場合、1・2・3・4・5・6・・・・20といった感じで。

158:デフォルトの名無しさん
17/05/22 23:49:46.04 g3oHLvAy0.net
>>151
Sub Macro1()
arr = ""
For tmp = 1 To Cells(1, 1).Value
arr = arr & "," & tmp
Next
Cells(1, 1).Validation.Delete
Cells(1, 1).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=arr
End Sub
>>148
vbaでもできるけど作業列作ったほうが早いと思う
俺なら作業列を使う

159:デフォルトの名無しさん
17/05/22 23:57:33.95 fGR6ky/u0.net
>>152
完璧すぎて鼻水でました
ありがとうございます

160:デフォルトの名無しさん
17/05/22 23:58:56.03 EzxM7okx0.net
俺も作業列勧めるな
直値で入れると文字数の制限があるだろ

161:デフォルトの名無しさん
17/05/23 00:12:52.19 fMtQNmiV0.net
>>149
If 俺 = "イケメン" Then
  俺 = 俺 & 彼女
End If

162:デフォルトの名無しさん
17/05/23 00:30:37.63 bLVWAbWWM.net
>>155
イケメンだったらおまえが消えて新しい命に書き換えられてしまうな

163:デフォルトの名無しさん
17/05/23 01:06:28.10 G9caL/WXp.net
>>155
実行時エラー
型が一致しません。

164:デフォルトの名無しさん
17/05/23 01:16:03.77 aBKdrymv0.net
>>157
酷過ぎワロタwww

165:デフォルトの名無しさん
17/05/23 02:03:21.06 3SYK1IcP0.net
>>139
省略する人は試行錯誤を大してやらないよ。
答えを求める奴は結局身にならない。
昔、高校受験用に行ってた塾にいた天才共は英語の辞書を丸暗記してたが俺は天才じゃ無いので英語の使い方(しくみ)を勉強した。
プログラミングもしくみが重要で個々の単語は都度調べれば良い。
本は必要無いと思うけど有っても良いとは思うし、自分もかなり買う方だ。
でも自分が本を買うのは興味からだな。
あ、自分は今はVBAの本を買うことはありません。
初心者なら読んでおもしろそうだったら買ってみれば良いんじゃない?

166:デフォルトの名無しさん
17/05/23 06:24:30.98 2tE3UxZ+0.net
多分その天才どもは英語の仕組みは既に把握したうえで、
上積みとして単語を丸暗記してるんじゃないか?
仕組みがエンジン、単語がガソリンと考えたら、
エンジンだけでもガソリンだけでも走れない。
効率の良いエンジンは少しのガソリンでも遠くまで走れるし、
沢山ガソリン積めれば少々お粗末なエンジンでもやっぱり遠くまで走れる。
どっちが大事じゃなくて両方大事。

167:デフォルトの名無しさん
17/05/23 06:30:19.51 DZlqaxyP0.net
試行錯誤する事で答えが判らない事を解決するスキルが身につく
このスキルはVBAにとどまらない
他のことにも応用できる

168:デフォルトの名無しさん
17/05/23 06:50:44.94 3FTCY8r/r.net
本は嘘が書かれてたりするから厄介
想定読者の知識レベルに合わせる理由でいろんな説明を端折ってミスリーディングな表現になってしまってたりするし、著者の知識が根本から間違ってるときもある

169:デフォルトの名無しさん
17/05/23 07:27:49.86 pxpR


170:UDcgM.net



171:デフォルトの名無しさん
17/05/23 07:34:02.08 Y2XmHkKh0.net
>>163
勉強の仕方の話だよ
回答はする

172:デフォルトの名無しさん
17/05/23 10:12:46.48 3SYK1IcP0.net
>>163
ほら、これが弊害だ。
きちんとアンカー追っていけば初心者がどうやって勉強すれば良いかの話から来てるのがわかる筈。
直近のレスだけ見るような手っ取り早さを求めるような奴には教えても無駄になるだけだ。

173:デフォルトの名無しさん
17/05/23 10:34:38.44 BzWPCBXiH.net
>>159
一生、
> Range("A1").Select
> Selection.Value=1
> Range("A1").Value=1
みたいなレベルを手探りで探し出すようなことやってろよ。誰にも迷惑かからないし。
だが、人には勧めるな。

174:デフォルトの名無しさん
17/05/23 11:06:55.30 3CTg7HpXa.net
>>166
それが分からないようじゃレベルがうかがいしれるねw
というか、あれを書いた俺がそんなレベルに無いことなんて想像も出来ないのか?
多少出来る奴なら誰でもマクロ記録のままのゴミコードを否定するだろうよ。

175:デフォルトの名無しさん
17/05/23 11:58:25.09 IihgumLkM.net
>>167
時間が無駄だってことだと思う
お前の技術レベルの話じゃない
物事には期日があるんだからそんなどうでもいいことに時間使うんなら本買った方がいい

176:デフォルトの名無しさん
17/05/23 12:01:49.66 ZBpIQRDpM.net
>>167
コミュ障技術者にありがちなバランス感覚の無さだな
VBAを理解する事が目的じゃないんだよ

177:デフォルトの名無しさん
17/05/23 12:06:29.03 TeKp5Ts0d.net
Validationて何だ?
と思うくらいExcelのオブジェクトのことを知らない。
VBAばっかりだからなあ

178:デフォルトの名無しさん
17/05/23 13:08:14.56 BzWPCBXiH.net
>>167
> というか、あれを書いた俺がそんなレベルに無いことなんて想像も出来ないのか?
お前のレベルなんか知ったこっちゃない。
> 多少出来る奴なら誰でもマクロ記録のままのゴミコードを否定するだろうよ。
ケースバイケースだし、議論する価値ない話題だね。

179:デフォルトの名無しさん
17/05/23 13:09:17.49 TeKp5Ts0d.net
友達じゃあるまいしな

180:デフォルトの名無しさん
17/05/23 13:19:37.53 DZlqaxyP0.net
>>168
それは答えが判ってる事にしか使えない
仕事では誰にも答えが判らない事を解決する事も多い
答え合わせができる問題で訓練した方が良い

181:デフォルトの名無しさん
17/05/23 13:26:08.31 DZlqaxyP0.net
答えが判ってることを効率的に片付けるには
答えを聞いたり調べれば良いけど
答えが判っていない新しいことを実現するには
その方法は使えない
自分で考えずに答えを求める事が
日本でイノベーションとかが比較的少ない原因かもな

182:デフォルトの名無しさん
17/05/23 13:29:05.48 BzWPCBXiH.net
新しい何かを始めるにあたって、入門書を読むとこから始めるのが「答えを求めること」なのか

183:デフォルトの名無しさん
17/05/23 13:36:08.12 S9zv8N7Q0.net
そして、答えはひとつだけでは無い

184:デフォルトの名無しさん
17/05/23 13:40:08.67 DZlqaxyP0.net
>>176
答えは一つじゃないから
入門書にこだわる必要はないな
入門書は何のために読むの?
小説か何か?
自分が判らないことの答えを知るためじゃないのか?

185:デフォルトの名無しさん
17/05/23 13:47:15.75 OJ3bnrAra.net
>>168
>>169
>>171
>一生、...みたいなレベルを手探りで探し出すようなことやってろよ。
に対してのレスだからコミュ障はオマエラだよ。
そもそもの話のはじまりは>>128だから具体的な案件で期日が既にあるという話じゃない。
コミュニケーションの取れない奴はこれだから困る。

186:デフォルトの名無しさん
17/05/23 13:56:20.46 BzWPCBXiH.net
>>178
この流れのそもそもの始まりは、>>128に対して>>132みたいなレスをしたからだ。
そもそも>>128は、おすすめの入門書を聞いてるんだよ。
それを本なんか不要とするからこうなった。

187:デフォルトの名無しさん
17/05/23 14:43:29.82 YXklfP5tx.net
お勧めの本は知りません
をやたら回りくどくやるのなw

188:デフォルトの名無しさん
17/05/23 15:12:36.24 zqdwD1uL0.net
>>180
マは性格捻くれたクソ野郎が多いからw

189:デフォルトの名無しさん
17/05/23 16:36:03.71 ZjKWQBEz0.net
たしかに>>132はクソレスだな
質問スレなんだから、素直におすす目入門書を挙げれば済む事

190:デフォルトの名無しさん
17/05/23 18:13:36.59 PCM7pP9za.net
横レスだけど128の質問も少し違和感がある。
"詳しい入門書"というのはなかなかないんじゃないか。
128は少なくとも全然vbaが分からないわけでわなくプロパティやメソッドの使い方が難しいと言ってるわけだから求めてるのはもはや入門レベルとは思えない。
感覚としては優しく丁寧に書いてある、という意味かもしれないが。

191:デフォルトの名無しさん
17/05/23 18:22:11.37 IihgumLkM.net
>>173
それは設計の話だな
実装からスタートする案件だとしたら話は変わってくるけど、、、

192:デフォルトの名無しさん
17/05/23 18:45:32.25 YXklfP5tx.net
早く教えて挙げて

193:デフォルトの名無しさん
17/05/23 18:53:06.25 IihgumLkM.net
>>131

194:デフォルトの名無しさん
17/05/23 20:04:53.74 vE+85AhN0.net
逆引き系の本てやりたい事がズバリ書いてある事ってどんだけあるの?
本当に使えるのかいまいち信用できん

195:デフォルトの名無しさん
17/05/23 20:24:44.89 4WGZqsHw0.net
星君の業務改善でいいじゃん

196:デフォルトの名無しさん
17/05/23 20:25:40.01 Y2XmHkKh0.net
逆引きは、逆引きがいらない事に気づかせてくれるありがたい本だよ

197:デフォルトの名無しさん
17/05/23 20:59:03.89 mDga4JbQ0.net
そう、誰も、
本を
読んでいないのである・・・

198:デフォルトの名無しさん
17/05/23 21:24:06.93 PaLG7AjU0.net
勤務表を作りたいと考えています
A1からの各セルにA1勤務開始時間、A2勤務終了時間、A3休憩時間と入れたら
A4からの各セルにA4割増無の勤務時間、A58時間以上の勤務時間、A6休日労働時間、A7深夜労働時間
とVBAを使用して入れたいのですがA7に入れる深夜労働時間の求め方が思い浮かびません
深夜勤務は22:00~5:00の間なのですが21:00~4:00、18:00~6:00みたいな勤務の場合どうやって深夜労働時間を求めればいいのでしょうか?

199:デフォルトの名無しさん
17/05/23 21:35:35.13 z+zsvOR8p.net
>>191
就業規則をよめ

200:デフォルトの名無しさん
17/05/23 21:41:04.89 Y2XmHkKh0.net
昔作ったなぁ
まず概念として、
0-5,5-22,22-29,29-46
と4つの区分に分ける。0-5と22-29を分けるのが味噌。一緒にするとややこしくなる
俺は甲時間 乙時間 丙時間 丁時間と名付けていた
入力は3項目じゃなく6項目。
出勤、退勤、甲乙丙丁それぞれいつ休み時間を取ったかわかるようにする
残業代は労働時間の合計-8時間になり、
休日は休日フラグを作り、勤務時間*割増分を別枠で付ける。
で、
21:00~4:00の場合の考え方は
開始時間が5:00以前なら5:00△開始時間が甲時間(仮)。終了時間が5:00以前なら更に5:00△終了時間を甲時間(仮)から引く。これが甲時間。今回は0
乙時間も似たような感じで、開始時間が5:00~22:00なら22:00△開始時間が乙時間(仮)。終了時間が22:00以前なら更に22:00△終了時間を乙時間(仮)から引く。これが乙時間。今回は1:00
あとは丙時間、丁時間も同じように求める
個人的には関数の方が修正しやすい、見通しも良いで作りやすいと思う
>>192
無能の自己紹介はいらないよぉ

201:デフォルトの名無しさん
17/05/23 21:41:20.14 Y2XmHkKh0.net
>>193>>191へのレスね

202:デフォルトの名無しさん
17/05/23 22:01:45.26 ADqqpGm90.net
以前、ここでシフト表を作りたいって人がいて、んで別スレまで出来てあれこれ皆が頑張っていたけど、途中で多分本人がやる気なくしてw
アボンだったな

203:デフォルトの名無しさん
17/05/23 22:07:18.85 z+zsvOR8p.net
>>193
残業代(金額)が、労働時間-8時間(時間)
とかw
好意的に解釈して残業代じゃなくて残業時間だとしても
-8時間かどうかは就業規則を読まないと判らないだろ

204:デフォルトの名無しさん
17/05/23 22:34:24.97 D2f+EUmlM.net
>>191
timevalue関数はご存知かな?
日時の時間部分だけをDate型に変換してくれるけど、Date型の値は24時間(=1日)を1とした数値として扱える。
以下、日付を跨ぐ値は1(=24時間)を足してます。
深夜開始 = TimeValue("22:00:00")
深夜終了1 = TimeValue("5:00:00")
深夜終了2 = TimeValue("5:00:00") + 1
出勤 = TimeValue(Range("A1").Value)
退勤 = TimeValue(Range("A2").Value)
If 出勤 > 退勤 Then 退勤 = 退勤 + 1
休憩 = TimeValue(Range("A3").Value)
労働時間 = 退勤 - 出勤 - 休憩
深夜労働時間 = IIf(出勤 < 深夜終了1, 深夜終了1 - 出勤, 0)
If 出勤 < 深夜終了2 And 退勤 > 深夜開始 Then
深夜労働時間 = 深夜労働時間 + IIf(退勤 < 深夜終了2, 退勤, 深夜終了2) - IIf(出勤 > 深夜開始, 出勤, 深夜開始)
End If
たぶんこんな感じ。
出勤表なんて作ったことないからテキトーですw
おかしかったら誰か直して~

205:デフォルトの名無しさん
17/05/23 22:55:16.52 Y2XmHkKh0.net
?cells(1,1).Address
で絶対参照の$A$1は取得できますが、
行のみ相対参照の$A1を取得する方法はありますか?

206:デフォルトの名無しさん
17/05/23 22:59:09.40 p/2ZNHs9p.net
それくらいヘルプ見れ
URLリンク(msdn.microsoft.com)

207:デフォルトの名無しさん
17/05/23 23:08:02.98 Y2XmHkKh0.net
>199
ありがとうございます、解決しました

208:デフォルトの名無しさん
17/05/23 23:10:34.50 Y2XmHkKh0.net
Range.Address プロパティ (Excel)について質問です
AddressはRangeオブジェクト内の関数ですが、vbaだと、値を取得する場合はプロパティと呼ぶのでしょうか?
引数があってもプロパティと呼ぶのですか?
他言語ではオブジェクトのメンバを直接取得したり値を設定するのがプロパティ、式がメソッドと思っていたのですが、
vbaが特別なのでしょうか。それとも他にこういう区分けの言語はあるのでしょうか
URLリンク(piyo-js.com)

209:デフォルトの名無しさん
17/05/23 23:39:33.41 kSdgf1uK0.net
プログレスバー使ったら値更新するたびにフォーカス奪うようになって別ウィンドウで文字入力とかスクロールしてると邪魔される
せっかくの長い処理中に別作業できるメリットが損なわれるようになってしまって困ってるんだけど何か解決策ないでしょか…?
プログレスバーないと処理中不安になって長く感じるのでできれば使いたいです
ちなみにWindows7上で使ってるExcel 2010です

210:デフォルトの名無しさん
17/05/23 23:44:33.10 CFQVOeJer.net
>>201
Addressは要はgetterですよね
Rangeクラス内部から見ればメソッドのように見え、クラス利用側から見るとメンバ変数のように振る舞いますが、
実態はString型の変数を返すメソッドでふ
メソッドがパラメーターを持つのは普通のことじゃないですかね

211:デフォルトの名無しさん
17/05/23 23:47:22.57 CFQVOeJer.net
でふって何だよ馬鹿かよ俺

212:デフォルトの名無しさん
17/05/23 23:52:40.77 Y2XmHkKh0.net
>>191
暇だから作った
URLリンク(www.dotup.org)
>>203
そうそう、そうなんです
で、vbaではそれをプロパティと呼ぶの?という質問なんです
このリンク先ではaddressをプロパティと言っています
URLリンク(msdn.microsoft.com)

213:デフォルトの名無しさん
17/05/23 23:55:26.87 CFQVOeJer.net
>>201
引数つきのgetter/setter(プロパティへのアクセサ)を作れるかどうかは言語仕様によります。
VBでは作れる、というだけの話

214:デフォルトの名無しさん
17/05/24 00:16:59.54 jVvBcvpG0.net
今日飲んだビール.TopValue

215:デフォルトの名無しさん
17/05/24 01:48:09.41 nPuq94IW0.net
>>205
自作クラスで言うと、
property get/set/let で定義するのがプロパティ、
sub/function で定義するのがメソッド。
range.addressみたく、getだけ定義されているプロパティとfunctionは外から見たら同じようなものだし、気にする意味がないと思う。

216:デフォルトの名無しさん
17/05/24 07:02:03.86 NmLbt9VS0.net
>>206>>208
なるほど、ありがとうございました
色々な考え方があるのですね
>>207
韓国産でしたっけ?危険ですのでやめたほうが良いと思います
お金のために健康を捨てるのはもったいないです

217:デフォルトの名無しさん
17/05/24 10:47:49.12 ktSIKEk8H.net
>>202
ステータスバーに進捗状況を表示するようにしたら?

218:デフォルトの名無しさん
17/05/24 14:14:59.56 9bsixbB10.net
VBA勉強中の初心者です。
最終的にやりたいのはテキストエディタから一部データを抜き出すのをしたいんですが抜き出し方がわかりません。
メモ帳にログが取り込まれてそこから必要なデータを取り除きたいです。
コンビニのレシートがデータしてるものと考えてください。
それでそのレジの最後の一台当たりの発売金額がわかるんですけど発売金額を抜き出したいのですが何をどうしたらいいのでしょうか?
まだ変数と制御構文くらいしか理解していません。

219:デフォルトの名無しさん
17/05/24 14:38:10.49 ktSIKEk8H.net
>>211
正規表現(RegExp)を使うと、指定したパターンに適合する文字列を抜き出せる。
以下は、"発売金額 \1,000"という文字列から"1,000"を抜き出すコード。
Sub foo()
  Set regex = CreateObject("VBScript.RegExp")
  regex.Pattern = "発売金額 \\([\d,]+)"
  
  Set res = regex.Execute("aaa発売金額 \1,000 bbb")
  If res.Count > 0 Then
    Set res2 = res(0).SubMatches
    Debug.Print res2(0)
  End If
End Sub

220:デフォルトの名無しさん
17/05/24 14:44:53.85 9bsixbB10.net
おお!ありがとうございます。
これを元に一つ一つググりながら理解していこうと思います。

221:デフォルトの名無しさん
17/05/24 14:53:05.51 9OGm2Cju0.net
>>211
VBAからADO使ってログファイル読み込みその際にSQL使って絞り込み
>>212
fooを使うんじゃねえhg

222:デフォルトの名無しさん
17/05/24 18:37:48.65 NmLbt9VS0.net
なんでfoo使うのダメなの?

223:デフォルトの名無しさん
17/05/24 18:45:27.67 BVqzNkwop.net
>>214
何でテキストファイルを読み込むのにSQLとかADO使うの?

224:デフォルトの名無しさん
17/05/24 18:52:32.09 qKRKK3Glx.net
>>216
適材適所

225:デフォルトの名無しさん
17/05/24 19:02:38.69 LTICL+DVa.net
HYPERLINK関数(mailto:)を使って、メールを送信するシートを作成しました。
B2からB30セルまで、ハイパーリンクが設定されている状態です。
この、B列に並んだハイパーリンクを全てクリックして自動で実行したいのですが、どのようなコードを使えばよいのか分かりません。
Hyperlink.Followメソッドでは、関数によるハイパーリンクを開けないことは分かったのですが、何か代替手段はあるでしょうか?

226:デフォルトの名無しさん
17/05/24 19:18:29.39 NmLbt9VS0.net
>>218
マクロ4.0でいけるっぽい
URLリンク(oshiete.goo.ne.jp)

227:デフォルトの名無しさん
17/05/24 20:09:08.13 YRGsLxEEr.net
>>218
なぜハイパーリンクしてるの?
VBAでセルの文字列データを取得して、それを使ってふつうにメールアイテムを作成して送信すれば良さそうだが

228:デフォルトの名無しさん
17/05/24 20:17:47.99 WW1YGaoR0.net
>>220
それはあらゆる場面において最低の解法
なぜかは自分で考えてね

229:デフォルトの名無しさん
17/05/24 20:48:39.32 42FTyawn0.net
だから、ちゃんと教える気がないなら黙ってろと

230:デフォルトの名無しさん
17/05/24 20:49:24.31 NmLbt9VS0.net
>>221
横からだけどさっぱり分からない
教えてください

231:デフォルトの名無しさん
17/05/24 21:12:42.89 9OGm2Cju0.net
>>216
>>211見てなんで使わないと思ったの?

232:デフォルトの名無しさん
17/05/24 21:23:52.71 YRGsLxEEr.net
>>221
あらゆる場面で、というのは随分と強い主張だな
シートのUI上でハイパーリンクを設定すべきかどうか、コード側でメールアイテム作成を制御すべきかどうかは設計次第だろ

233:デフォルトの名無しさん
17/05/24 23:00:58.40 LLuwxDnS0.net
>>193
>>205
ありがとうございます。入力フォーマットが既に決まっていて変更できず休憩時間を手入力させるのは難しいです
21:00~6:00の場合、22:00~5:00の時間が何時間含まれているかわかればいいんですがいいロジックが思い浮かびません
今思い浮かんだのは1ヶ月間を0~744時と考えて、24(n-1)を足せば求められるんではと考えてしまいます

あと今日VBAでSQLのクエリ文を作っていたのですがString型って文字数制限があるんですか?
それにに引っかかったみたいで途中クエリが消えてしまい原因がわからずかなり苦戦しました

234:デフォルトの名無しさん
17/05/24 23:03:01.52 BVqzNkwop.net
>>224
何でテキストをsqlで読もうとするの?

235:デフォルトの名無しさん
17/05/24 23:06:50.11 NmLbt9VS0.net
>>226
数式読みなよ、全部書いてる
URLリンク(www.dotup.org)
あとstringに制限は事実上ない
一旦varchar(255)辺りに入れてない?テーブルの制限に引っかかってる気がする

236:デフォルトの名無しさん
17/05/25 00:02:05.58 rwwycwh80.net
>>227
>>211見てなんで使わないと思ったの?

237:デフォルトの名無しさん
17/05/25 00:54:27.96 UDUA6Pg7p.net
>>229
sqlって何する為のものか知ってる?

238:デフォルトの名無しさん
17/05/25 01:14:28.72 +tui60Va0.net
SQLはOracleに代表されるようなDBMSを制御するための言語 ExcelでもDMMSを相手にして使えるがそれはDBMSあってのこと

239:デフォルトの名無しさん
17/05/25 01:15:33.62 +tui60Va0.net
×DMMSを相手に ○DBMSを相手に

240:デフォルトの名無しさん
17/05/25 04:05:21.88 VTDAVdX70.net
別にADOは便利なツールとしても使えるだろ。
けど、俺もテキストエディタだったらもっと単純にゴリゴリしたの考えるな。
LeftとかMidとかRightとかInstrとかInstrRevとかを使ったようなの。

241:デフォルトの名無しさん
17/05/25 04:15:26.23 VTDAVdX70.net
あっ、テキストエディタ作りたいんじゃ無くて、テキストからデータ取り出したいだけ?
だったら、やっぱりMidとかInstrとか基本的な関数で十分な気がするね。
>>211
発売金額はテキストの中でどんな風に位置してるの?
例えば10行目の20文字目から10桁みたいな感じ?

242:デフォルトの名無しさん
17/05/25 04:18:03.03 VTDAVdX70.net
>>211
あと、何でメモ帳使いたいのかな?
別にメモ帳上でいろいろ操作することも出来るけど、少しだけ高度になるんだよね。

243:デフォルトの名無しさん
17/05/25 08:42:10.69 QSuakdFza.net
>>219
ありがとうございます!
リンク先に記載のコードを試してみたのですが、残念ながら「指定されたファイルを開くことができません」のエラーが出てしまいました。
普通にセルをクリックするとメールが立ち上がるのですが、vbaを使うと、このようになってしまいます…

>>220
大変レベルが低い話なのですが、
滅多に触ることのない超初心者のため、作る労力とメンテナンスのことを考えて、できることは関数ですませ、vbaは最低限にしている次第です。

244:デフォルトの名無しさん
17/05/25 08:53:36.25 MawhMErZ0.net
>>236
「ハイパーリンクをクリック」
逆に難易度が上がってるぞ

245:デフォルトの名無しさん
17/05/25 12:02:32.06 KGZHRfFH0.net
>>236
>>219の方法でやるなら
HYPERLINK関数の 第二引数を省略した形で Evaluate しないとだめよん
よって
・元々の HYPERLINK関数で 第二引数を省略してしまう
・VBAで HYPERLINK関数の第二引数をカットしてからの Evaluate
のどっちかにするしかない
がんばってね

246:デフォルトの名無しさん
17/05/25 12:10:08.17 slr5zzcza.net
>>238
第二引数を省略したら、無事にメール作成できました!
今の自分のレベルでは、仕組みが理解できていませんが、本当に助かりました。
ありがとうございます!

>>237
こちらの方がレベルが高かったのですか…
そういったことの判断すらできず、vbaでノーツメールを直接作るコードを調べてみて、複雑そうなので、諦めてしまっていました。
もう少し勉強しようと思います。

247:デフォルトの名無しさん
17/05/25 12:33:52.09 6krMH9aUr.net
>>239
クリック等のイベントをトラップしようとすると、既定オブジェクトのモジュールやクラスモジュール等にコードを書いてハードコーディングしなきゃならなくやる
イベントの発生タイミングを考えてエラー回避の制御なども追加しなきゃならない
イベントはコードディングと保守の難易度を上げる、と認識すると良いよ
メーラーアプリのオブジェクトインスタンスを作成して操作するやり方は一見複雑そうだけど、やってることはエクセルの既定オブジェクトの操作と一緒
基本的には標準モジュール一個でコードが収まるから楽だよ

248:デフォルトの名無しさん
17/05/25 16:27:17.14 BhGEKkNfa.net
>>240
別にそんなにハードル上がってるわけじゃないでしょ。
こういう場合、自分はまずメールを作るプロシージャを作る。
それはメールに必要な宛先、タイトル、本文等の引数を元にしたプロシージャとなるだろう。
そして当然汎用的なものだから標準モジュールに書くことになるだろう。
後はそれをどのようによび出すかを考えれば良い。
B2からB30までのアドレスを元にメールを作るのだからメニュー(コマンドバー)から呼び出すとかシートに貼り付けたボタンから呼び出すとかが考えられる。
呼び出す処理ではB2からB30までのループ処理の中で標準モジュールに作ったメール作成プロシージャを呼び出すようにすれば良い。
尚、この場合ハイパーリンクはプログラムと関係が無い。
個別に開くために設定しても良いし、設定しなくても良い。
単純に空のメールを一度に複数開きたいだけならハイパーリンク使う方が簡単な気もするけど、そんな需要で完結するとは思えない。
だから自分だったら両方作って片方をコメントアウトしとくだろうな。

249:デフォルトの名無しさん
17/05/25 16:42:30.82 yXnULsJhH.net
俺語りうぜぇ

250:デフォルトの名無しさん
17/05/25 16:44:23.96 9Akggys5x.net
>>242
お前の感想は
もっと要らない

251:デフォルトの名無しさん
17/05/25 16:58:40.94 yXnULsJhH.net
>>229
> >>211見てなんで使わないと思ったの?
なんでって普通使わないから。

252:デフォルトの名無しさん
17/05/25 17:43:48.64 6krMH9aUr.net
>>241
メールアイテム作成が複雑そうと言ってるのは質問者なので、そこは間違えないでね

253:デフォルトの名無しさん
17/05/25 17:58:07.99 yS9f0RVc0.net
VBAに滅多に触ることのない超初心者になに難しいこと語っちゃってんだよw

254:デフォルトの名無しさん
17/05/25 18:04:11.11 yX9RoGiCa.net
データの取り出し方とか質問するならせめてデータ構造の例ぐらい出しておかないと返事のしようがないような

255:デフォルトの名無しさん
17/05/25 18:13:41.54 DyEVqbiqd.net
テキストファイルをSQLで扱うときってどのドライバを使うもんなの?

256:デフォルトの名無しさん
17/05/25 18:18:45.36 yXnULsJhH.net
>>248
> テキストファイルをSQLで扱うときってどのドライバを使うもんなの?
だから、普通はしないってば。
相手がCSVならかろうじてする場合もあるかもレベル。

257:デフォルトの名無しさん
17/05/25 19:08:00.44 BhGEKkNfa.net
いや、だから便利にADO使う場合もあるってば。
例えばUTF8の読み書きとか。
他にも


258:色々利用できるものがある。



259:デフォルトの名無しさん
17/05/25 19:19:07.99 IjFnSfL20.net
>>250
色々って例えば何?

260:デフォルトの名無しさん
17/05/25 19:35:14.21 eYj1KCTuM.net
曖昧だなぁ

261:デフォルトの名無しさん
17/05/25 20:12:54.49 MawhMErZ0.net
テキストファイルにSQL使える事に驚き

262:デフォルトの名無しさん
17/05/25 21:35:50.77 Prbt/S0pa.net
>>251
例えばネットからファイルをダウンロードする場合、普通はURLDownloadToFileを使うと思うが認証付きの場合はADOが使える場合がある。

263:デフォルトの名無しさん
17/05/25 22:27:40.96 bN5MkpLw0.net
名前の判別でRかLのはいったやつを分けるマクロが書きたいんですがRとLは,かスペースに挟まれてるか最後一文字です
ただし最後一文字ならその前にスペースが入ってます
こういう場合スマートな判別ってどうしますか?

264:デフォルトの名無しさん
17/05/25 22:47:25.62 o/KEVGaTr.net
>>255
正規表現で解決じゃね

265:デフォルトの名無しさん
17/05/25 23:08:23.52 rwwycwh80.net
>>247
まぁそうだけど大体ログと言えば規則的に並んでいると推測できるよね
視野が狭い人多い
そもそも>>211>>216をよく読んで理解せずに発言してる人多過ぎ

266:デフォルトの名無しさん
17/05/25 23:14:32.15 Priyoi2O0.net
煽ってるわけじゃないが、>>211は全力で意味を理解しようと思って読んでも
どういう状態を説明しているのか、よく分からなかった(特に後半)
みんなスゴイね(まじで)

267:デフォルトの名無しさん
17/05/25 23:23:44.35 rwwycwh80.net
>>255
>>212のように正規表現がいいけど
細かい話をするとスマートが何を指しているのか
早さとかコードの見た目とかね
>>258
ド素人の言い回しって大体わかるじゃん?たまにぶっとんでるのいるけど
だいたいこういうのは、CSVで出力されたPOSデータの計行のみ抽出したいってぱとぅーん
だから>>214、もちろんその後でMIDとか使う必要はあると思う

268:デフォルトの名無しさん
17/05/25 23:24:53.01 rwwycwh80.net
>>258
分かってない奴の事を分かっていないで理解しようとしないから
タイヤブランコみたいなのが出来ちゃうんだよww

269:デフォルトの名無しさん
17/05/25 23:29:21.59 trQS6AD+0.net
>>259
正規表現は何がスマートなのか
早さ?がスマートな例は
コードの見た目がスマートな例は
たった3種類なんだから答えてあげれば?

270:デフォルトの名無しさん
17/05/25 23:31:18.48 rwwycwh80.net
>>261
そういうのいいからw仲良くやろうぜ

271:デフォルトの名無しさん
17/05/25 23:33:20.64 trQS6AD+0.net
>>262
お前がいじわるなつっこみするから俺もいじわるしただけだ

272:デフォルトの名無しさん
17/05/25 23:35:49.43 MawhMErZ0.net
この件で言えばスマートなのはどう考えても正規表現だろう
ifやmidで無理矢理解決するのは力技ではなく、単に勉強不足だ

273:デフォルトの名無しさん
17/05/25 23:36:09.55 rwwycwh80.net
マにありがちな意地悪なw
突っ込まれたいとか>>263ホモ警報w

274:デフォルトの名無しさん
17/05/25 23:37:26.93 rwwycwh80.net
>>255は多分釣り
分かってて書いてる感

275:デフォルトの名無しさん
17/05/25 23:40:28.47 trQS6AD+0.net
>>265
あ?調子に乗りすぎだお前

276:デフォルトの名無しさん
17/05/25 23:43:35.70 rwwycwh80.net
>>267
255の正規表現を誰かが書くと、とたんに俺が書いた正規表現の方がスマートだ合戦開始の流れだよなw

277:デフォルトの名無しさん
17/05/25 23:45:17.90 o/KEVGaTr.net
midとかifだと、検索対象文字列のパターンが変更されたらいちいち検索処理の制御構造を変えなきゃならないかもしれない
正規表現だったら大抵RegExpオブジェクトのプロパティの設定値を変えるだけで修正が終わる

278:デフォルトの名無しさん
17/05/25 23:49:52.88 2PvZEflm0.net
俺なら正規表現とか難しいのわかんないからこれで済ませちゃうな
スマートさのかけらもないけど
Function isRL(str) As Boolean
 isRL = str Like "*[, ][RL][, ]*" Or str Like "* [RL]"
End Function

279:デフォルトの名無しさん
17/05/25 23:53:17.40 rwwycwh80.net
>>270
それだと
,R_
みたいなのも反応しちゃうような
_はスペースね
これも全角半角スペース区別とか不明だからまあ

280:デフォルトの名無しさん
17/05/25 23:57:37.38 2PvZEflm0.net
>>271
日本語がどっち指してるかわからなかったからそれも含まれると解釈したんだけど
それ入らないならOrいっこ増やすだけだし
もちろんもっと複雑さが増してくれば正規表現調べようって気にもなってくるけどね

281:デフォルトの名無しさん
17/05/26 00:01:53.74 WxppAu020.net
>>272
>>263と同じで突っ込みたかっただけ、めんごめんごw
あとLikeだと大文字小文字区別しないよね、だから
RLもrlも混同してしまうマッチだけにwww

282:デフォルトの名無しさん
17/05/26 00:08:29.13 JFu5myv50.net
>>273
おまえいいやつだな
それでも突っ込むとOption Compare Text書いてなければ大文字小文字区別するよ

283:デフォルトの名無しさん
17/05/26 00:09:45.41 WxppAu020.net
>>274
勘違いしてたすまん、女だから許してw

284:デフォルトの名無しさん
17/05/26 00:15:45.66 Q8wFVHRlr.net
女だから許してで草
今度から俺も使おうw

285:デフォルトの名無しさん
17/05/26 00:16:58.01 WxppAu020.net
>>276
だってせっかくこれ言いたかったら間違えたのに
誰も突っ込んでくれないからさ
>RLもrlも混同してしまうマッチだけにwww

286:デフォルトの名無しさん
17/05/26 00:24:41.93 JFu5myv50.net
Option Compare Gender

287:デフォルトの名無しさん
17/05/26 00:48:48.42 Q8wFVHRlr.net
混同でマッチで喜ぶとかババァで草

288:デフォルトの名無しさん
17/05/26 06:10:08.78 7RhNv1Zw0.net
>>257
そんなのただの推測に過ぎないだろ

289:デフォルトの名無しさん
17/05/26 08:11:41.20 Y2pnKR05a.net
>>257
そりゃそうだが、たまに意味わからん形式のログあったりするし
説明のしやすさに直結するだろ

290:255
17/05/26 08:38:47.74 iQOaaYC+M.net
いろいろな意見ありがとうございます
釣りではないですが正規表現で良さそうとは感じていました
ただ正規表現の書き方がわからなかったのと本当に正規表現が一番適した書き方かわからないのでああいう聞き方になりました
なんか混乱させてしまったようですみません

291:デフォルトの名無しさん
17/05/26 09:24:25.07 HjxgyacU0.net
すまん俺も女だわ
髭そって会社いくか・・

292:デフォルトの名無しさん
17/05/26 09:50:48.59 Vk+zDyie0.net
正規表現が良いとは限らんよ。
構造を元にした固定の場所の方が良い場合もある。
だからデータの中から取り出したい値がどの様に配置されてるかが重要。
質問する時に出来ればそれを示して欲しかったね。

293:デフォルトの名無しさん
17/05/26 09:52:42.09 Vk+zDyie0.net
>>282
ごめん。
>>255で書いてあったか。
正規表現だね。

294:デフォルトの名無しさん
17/05/26 10:23:01.77 4SMbnGa40.net
初心者です。
ユーザーフォームを最近覚えて作成中です。
中身はとりあえずメッセージBOXで工事中にしてユーザーフォームを凝ってみようと思うんですけど
いい見本とかありませんか?
アプリっぽく作ってシートへのハイパーリンクで満足しようかと思います。

295:デフォルトの名無しさん
17/05/26 11:05:39.54 FvwfjnU+H.net
>>250
> 例えばUTF8の読み書きとか。
それは、ADODB.Streamを使うということであって、SQL(クエリ)を使うということじゃないよね。
故意になのか無意識なのかしらないけど、それを混同させてどうしたいのか。

296:デフォルトの名無しさん
17/05/26 19:27:53.93 HjxgyacU0.net
>>286
イマイチ何がしたいかわからんが、
よく使われるもの、googleかamazon辺りを参考にしてみては

297:デフォルトの名無しさん
17/05/26 19:40:01.56 KALLaxQr0.net
昨日正規表現で質問したものです。
リファレンスブックを読みながら正規表現で[,\s]R[,\s$]ってな感じで検索して
マッチした数値>0で�


298:ェ別ってプログラムを組んだのですが、一つ問題が… 取得した文字列の最後が,Rとなっていたときに反応しないです… 正規表現としてはこれであっていると思うのですが何か勘違いしてるんでしょうか?



299:デフォルトの名無しさん
17/05/26 20:03:21.45 HjxgyacU0.net
>>289
こうだとうまくいく
[,\s](R[,\s]|R$)
[]内に$はダメなんかね

300:デフォルトの名無しさん
17/05/26 20:07:54.29 I1+YwiguM.net
>>289
文字列の最後としての $ は文字じゃないから [ ] の中には入れられない
(入れると文字としての $ と見なされると思う)
> 名前の判別でRかLのはいったやつを分けるマクロが書きたいんですがRとLは,かスペースに挟まれてるか最後一文字です
これちょっと曖昧
",R," とか " R " はいいとして " R," とか ",R " もいいのか?
とりあえずいいとしてスマートかどうかを問わなきゃ
"(?:[\s,][LR][\s,].*|\s[LR])$"
辺りでどうか

301:デフォルトの名無しさん
17/05/26 20:08:59.71 WxppAu020.net
>>289
勘違いしてます
([,\s][R][,\s]?$)
あとそれだと、,R,だけじゃなくて,R_みたいなのも反応するけどいいの?
って聞いたんだけどお前全然人のレス読んでないのなw

302:デフォルトの名無しさん
17/05/26 20:19:12.02 WxppAu020.net
質問者 >>255 (ドコグロ MM3f-fCG8) ID:iQOaaYC+M
回答者 >>291 (ドコグロ MM3f-ijLw)  ID:I1+YwiguM
やはりお姉さんの言った通り(>>266)釣りだった感

303:デフォルトの名無しさん
17/05/26 23:27:30.93 KALLaxQr0.net
回答ありがとうございます
[]内に$は受け付けないんですね…
,R_は信じがたいことにそう入力されてるデータを見つけてしまったので分別に必要です。
なんか荒れに荒れてる感じですいません…
とりあえず私は質問しかしてません

304:デフォルトの名無しさん
17/05/26 23:32:22.16 HjxgyacU0.net
荒れてないから大丈夫
ただそろそろスレから退散した方が、不愉快な思いをしなくて済むとは思う

305:デフォルトの名無しさん
17/05/27 01:01:00.58 acGsd7ij0.net
>>294
もう解決したんでしょ?バイバイ

306:デフォルトの名無しさん
17/05/27 01:04:32.39 SLDKDwXi0.net
嘘つきは泥棒の始まり

307:デフォルトの名無しさん
17/05/27 01:37:01.15 P2SJDJfj0.net
ほらねw

308:デフォルトの名無しさん
17/05/27 11:48:01.37 j+tL9L540.net
>>287
ああ、すまん。
俺は>>233でADOの観点で絡んでた。
確かに元々の話は何故SQLって話だね。

309:デフォルトの名無しさん
17/05/27 16:06:04.75 acGsd7ij0.net
では次の方どうぞ

310:デフォルトの名無しさん
17/05/27 21:40:12.40 BMnR9+ov0.net
>>253
使えるってだけだよ。
Schema.iniを使わないと、
勝手に型を決めやがるから、物凄く使い勝手が悪い。

311:デフォルトの名無しさん
17/05/27 22:24:03.65 vVj1nMv00.net
マの特技:あらさがし

312:デフォルトの名無しさん
17/05/27 22:53:30.64 P2SJDJfj0.net
当たり前だ
その技術がなければバグだらけのコードになる

313:デフォルトの名無しさん
17/05/27 23:19:58.15 wHxGIeSt0.net
だがならない

314:デフォルトの名無しさん
17/05/29 06:22:57.97 KA+g5PFR0.net
$$$4.3$$$
"V"="1.3335412","0","1","3Q",

315:デフォルトの名無しさん
17/05/29 19:34:45.91 Q1hkb32K0.net
マクロ初心者ですが質問させてください。
Sheet1のB1-B16000の文字列を同じファイル内の新規シートに
699列毎コピーしたいです。
ググって下記まで作ったのですがエラーが出ます
いかんせん知識が無いため、何が間違っているのか分からないです。
どこを修正すればいいのかご教示いただけますでしょうか。

Sub マクロの記録改()
  Dim n As Long '変数の定義
  For n = 1 To 15206 Step 699
    Sheets("Sheet1").Select '元シートの「Sheet1]を選択
    Application.Goto Reference:="R" & n & ":R" & n + 699
    Selection.Copy 'コピー
    Sheets.Add 'シートを追加
    ActiveSheet.Paste '貼り付け
  Next n
  Application.CutCopyMode = False 'コピーの解除
End Sub

316:デフォルトの名無しさん
17/05/29 19:48:29.74 aGWTIe1b0.net
>>306
とりあえず走らせたけどエラーでなかったよ
どこで出るの?
そもそも何をしたいの?
元々あるのはsheet1だけとして
sheet2のA1にB1-B699貼り付け
sheet3のA1にB700-B1399貼り付け
ってこと?

317:デフォルトの名無しさん
17/05/29 19:59:34.93 CxTrZaFuM.net
>>307
699毎なのでB700-B1398じゃね?

318:デフォルトの名無しさん
17/05/29 20:27:18.52 Q1hkb32K0.net
失礼しました
説明が間違ってました。
エラーではなくて、A行もコピーしてしまうのでB行をA行にコピーしたいです。
まさに、>>307-308さんの言ってることをやりたい形です!!

ちなみに別bookにコピーする場合は、
どういった記述にすれば良いのでしょうか?

319:デフォルトの名無しさん
17/05/29 20:40:52.02 2e2e3QA1d.net
>>309
A列に貼るようにするなら
"R" & n & "C2:R" & n + 699 & "C2"
に変えるだけかな

320:デフォルトの名無しさん
17/05/29 20:52:28.37 aGWTIe1b0.net
>>309
こんな感じかねぇ
URLリンク(www.dotup.org)
Sub foo()
'setで参照を作成しておく
Set コピー元シート = ThisWorkbook.Sheets("main")
Set コピー先ブック = Workbooks.Open("./copy.xlsx")
'何行ごとか
処理行数 = 699
'ループ
For i = 1 To 21
Set コピー先シート = コピー先ブック.Sheets.Add(After:=Sheets(Sheets.Count))
'コピーでもいいけど、あえてvalueで処理。どっちでもいい
For k = 1 To 処理行数
コピー先シート.Cells(k, 1).Value = コピー元シート.Cells(k + (i - 1) * 699, 2).Value
Next
Next
End Sub

321:デフォルトの名無しさん
17/05/29 20:53:24.05 aGWTIe1b0.net
そういや昔はsetがさっぱり意味不明だったな
今は普通に使えるけど、なんだったんだろう

322:デフォルトの名無しさん
17/05/29 21:01:49.00 dfm78vLC0.net
>>312
ま、やらしぃ

323:デフォルトの名無しさん
17/05/29 21:12:47.40 aGWTIe1b0.net
>>313
sexじゃないよ><

324:デフォルトの名無しさん
17/05/29 21:15:07.23 CxTrZaFuM.net
>>314
今は普通に使えるsexとか

325:デフォルトの名無しさん
17/05/29 22:00:26.21 YdL4iPz30.net
>>311
だからfooを使うんじゃねえhg

326:デフォルトの名無しさん
17/05/29 22:02:15.89 aGWTIe1b0.net
>>316
理由教えてくれよ
理由がなければ使い続けるぞ。名前考えるの一番めんどくさいからな

327:デフォルトの名無しさん
17/05/29 22:15:25.36 MyydkzNO0.net
毛を吹き飛ばされるかんじがするんじゃないの?

328:デフォルトの名無しさん
17/05/29 22:23:14.52 EJnEHaIs0.net
俺ルールに違反してんだろ?スルーしろよ

329:デフォルトの名無しさん
17/05/29 22:31:37.50 nT+AAD4u0.net
俺ルールかっけー!

330:デフォルトの名無しさん
17/05/29 22:34:37.05 YdL4iPz30.net
>>317
>名前考えるの一番めんどくさいからな
代わりにわたしが考えたよ
hogeでよろ
これでもう考える必要ないよ
>>318
そうです
>>319
生理的に無理

331:デフォルトの名無しさん
17/05/29 22:38:31.20 A34reMmc0.net
ピリピリしてるハゲってなんていうか、微笑ましいよな
ハゲ好きだわーオレ、なりたくねーけど

332:デフォルトの名無しさん
17/05/29 22:56:21.54 aGWTIe1b0.net
>>321
hogeがfooにまさるメリットとは?
先にfooのメリットを書くと、
・文字数が少ない
です

333:デフォルトの名無しさん
17/05/29 23:01:15.36 YdL4iPz30.net
>>323
じゃあ f だけにして
・文字数が少ないよ

334:デフォルトの名無しさん
17/05/29 23:04:09.54 aGWTIe1b0.net
>>324
fooは慣例の単語
それを不必要に削ると無駄な間違いが増える
揚げ足取りしか出来ないなら使い続けるね

335:デフォルトの名無しさん
17/05/29 23:05:06.76 73+YE/SF0.net
そもそもhogeとfooが何なのか分から�


336:B C言語のスタジオえっちみたいなものですか?



337:デフォルトの名無しさん
17/05/29 23:06:16.47 YdL4iPz30.net
>>325
Sub foo()
としか使ってないのに、なんの間違いが増えるの?

338:デフォルトの名無しさん
17/05/29 23:08:06.88 aGWTIe1b0.net
>327
名前が被る

339:デフォルトの名無しさん
17/05/29 23:08:08.96 qTUj1SpC0.net
4~3月の売上をまとめて円グラフで描画したいんですがどう描けばいいのかわかりません
そもそも各月の売上をまとめて円グラフで描画しようとするのが間違いでしょうか?

340:デフォルトの名無しさん
17/05/29 23:10:27.21 T7IU40/g0.net
ヒソヒソ( ゚д゚)ヤダァ(゚д゚ )ネェ、キイタ?( ゚д゚)オクサン(゚д゚ )アラヤダワァ ハゲテルノニExcelツカッテルンデスッテ! シツレイシチャウワネ

341:デフォルトの名無しさん
17/05/29 23:10:38.64 aGWTIe1b0.net
>>329
はい
扇風機なら夏、おもちゃなら必ず12月が伸びるので毎年同じ形になる円グラフは向いていません
折れ線グラフで前年度、その前の年度を重ねて昨年度対比にするとわかりやすいと思います

342:デフォルトの名無しさん
17/05/29 23:21:33.31 YdL4iPz30.net
>>328
被ってるのお前のあそこだろ

343:デフォルトの名無しさん
17/05/29 23:23:51.96 aGWTIe1b0.net
>>332
結局「なんとなく嫌い」以上の理由が一切ないの?
申し訳ないがそれでは従う気にはならないなぁ

344:デフォルトの名無しさん
17/05/29 23:25:30.91 YdL4iPz30.net
Sub fooをNGにした

345:デフォルトの名無しさん
17/05/29 23:29:17.49 YdL4iPz30.net
>>333
ところで何であなたワッチョイの後半部分ころころ変わるの?

346:デフォルトの名無しさん
17/05/29 23:33:39.65 aGWTIe1b0.net
>>334
だから何www
>>335
知らないよ。プロバイダはio光。別に回線を繋げなおしたりはしてないよ

347:デフォルトの名無しさん
17/05/29 23:55:50.00 YdL4iPz30.net
>>336
eoだろ
無駄な間違いが増えるとか言ってる割に2文字すら間違えるっていうwww

348:デフォルトの名無しさん
17/05/29 23:56:19.54 EJnEHaIs0.net
これからは Sub foo()って書いとけば馬鹿避けになるのね。了解!!

349:デフォルトの名無しさん
17/05/29 23:56:51.93 aGWTIe1b0.net
>>337
(ノ∀`)アチャー
Sub fooをNGにしてるなら>>336は本来見えないはずだけど、連鎖NGしてないの?
連鎖NGしないとNGの意味がないからさっさと設定しようね
透明あぼーんがオススメだよ

350:デフォルトの名無しさん
17/05/30 00:02:35.81 q6a+ppT10.net
>>338
という結論以外でなかったね
大体予想してたけど、無意味な結論にたどり着くというのも有意義なことだ

351:デフォルトの名無しさん
17/05/30 00:05:37.88 OSl0TMez0.net
>>339
効いてる効いてるwww

352:デフォルトの名無しさん
17/05/30 00:09:03.85 q6a+ppT10.net
>>341
実は>>337でひっかかることを予想して>>339>>336の直後に書いてたんだよ
ほんとは>>337の5秒後以内に書き込みたかった。リロードしてる内にめんどくさくなった
1分空くと後付っぽい?

353:デフォルトの名無しさん
17/05/30 00:09:14.81 yu6lRt6yx.net
>>340
同意する
ID:YdL4iPz30
さよなら。
また来世でな

354:デフォルトの名無しさん
17/05/30 00:11:22.34 OSl0TMez0.net
>>342
悔しいの?www
後付けかどうかより
>リロードしてる内にめんどくさくなった
お前は面倒発言ばっかりだなwww

355:デフォルトの名無しさん
17/05/30 00:12:08.17 q6a+ppT10.net
>>344
vbaなんて仕事が面倒くさいから習得するもんだろう
それ以外なんかあんの?

356:デフォルトの名無しさん
17/05/30 00:13:23.62 OSl0TMez0.net
>>345
vbaじゃなくてVBAってちゃんと大文字で書け

357:デフォルトの名無しさん
17/05/30 00:16:18.61 q6a+ppT10.net
>>339>>337の数秒後にレスできたら完璧だったんだけどなぁ
これはちょっと悔しかった。予想以上にレスが遅かった。見え見えの釣りに飛びつくと思ったら2分もかかるとは
俺の実力も足りんし、忍耐力も足りなかった
申し訳ない
>>346
なんのために?vbaって書いてそれで誰か損してるの?
じゃあ書いてやるよwwwVBA!VBA!満足かwww

358:デフォルトの名無しさん
17/05/30 00:17:08.32 OSl0TMez0.net
>>347
満足したありがとう

359:デフォルトの名無しさん
17/05/30 00:17:13.63 q6a+ppT10.net
だから>>347が見えるってことはNGにしてないってことなの
何回引っかかるの

360:デフォルトの名無しさん
17/05/30 00:45:32.08 RIAflGJM0.net
すぐ消すテストプログラムをfooとかにしたことはないなあ。

361:デフォルトの名無しさん
17/05/30 06:56:36.98 tBmyQlvfM.net
>>350
ほんとに一時的なら t とか x とかにしてるわ

362:デフォルトの名無しさん
17/05/30 08:10:45.63 06cdz9ADx.net
久々にスレ開いたらハゲが躍動してて笑った

363:デフォルトの名無しさん
17/05/30 08:16:18.25 Pn7VLVPda.net
なんやこのガイジは

364:デフォルトの名無しさん
17/05/30 08:50:49.88 C+7xWm9cM.net
>>310,311
亀レスですいません!!!
できました!!!!
ありがとうございました!!

365:デフォルトの名無しさん
17/05/30 12:29:57.72 1+UI8ryZ0.net
誰かアドバイスおばお願いできませんか
野球関連の仕事をしているんですが、選手成績のデータをcsvで貰っていて
それを自分の所のcsvに入力しないといけないんですが、いかんせん数が膨大でデータを
並び替えやら抽出やらで変換したいんですが、この場合に覚えた方が良いプログラムってのは
エクセルでマクロを組むってのが手っ取り早い近道なんでしょうか?
それともほかのプログラム言語を覚えてソフトを開発って手も考えた方が良いのでしょうか?

366:デフォルトの名無しさん
17/05/30 12:42:58.11 I4Et1tpDd.net
>>355
「自分の所」って?
一人で自由度が高いならSQLServer Express入れるのが一番だと思う。
タダだし将来性もある。難しくもない。

367:デフォルトの名無しさん
17/05/30 12:44:07.68 I4Et1tpDd.net
膨大っても高々数十MBのレベルでしょ?

368:デフォルトの名無しさん
17/05/30 13:14:12.67 1+UI8ryZ0.net
>>356
正確に言い過ぎると微妙な案件だと思って濁し気味なのですが、貰っているデータというのは
プロ野球のデータ提供サービスのBISと言われるデータ提供会社のcsvで
『自分』というのは自分の会社で使っている野球中継用のソフトとなります。
(野球中継用のソフトもcsvでデータを賄っているのですが、当然フォーマットが違うので
貰ったデータをもとに普段は手入力しています。)
>>357
確かに膨大というのはSEさん達からしたら笑ってしまうレベルの数なのでしょうが
限られた時間(集合時間から試合開始までの時間)で手入力で間違いなく必要項目を入力するという問題なので
プログラムにまかせて一括変換できるのなら、間違いも少ないでしょうし、オペレーターの習熟度に左右されずに仕事につかせやすいので、
非常に有益な事だと思ったのです。
本来なら仕様を出して、プログラム作ってもらえば済むことなのかもしれませんが
自分の所で使っている野球ソフトも仕様変更でcsvの項目順番とかずれる可能性もありますし、
提供してもらっているデータも仕様変更とかで順番ずれたりした時に毎回発注とかしたくないので
急ぎではないし自分で作れる様になりたいなと思って相談させてもらいました。


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