Excel VBA 質問スレ Part48 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
!extend:checked:vvvvv:1000:512
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1489557874/
※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 前スレでScreenUpdating=Falseしない派いる?ってのがあったけど、コード書いてる時は基本しない。
あれで速くなったっていうのは基本コードが悪いだろ。 >>2
ScreebUpdating =False : 警告Off
ScreebUpdating =True : 警告On ScreenUpdatingの有無で速度が左右されるのは、セルに値を入れる等して描画に影響する操作をする場合だけだから、
結果を吐き出す際に一度だけしかセルにアクセスしないとかなら要らないね。 >>5
表示の更新してんなら要るわ
あとエクセルでセルに値を書き込むことを「吐き出す」と言うのは
素人が玄人の真似して訳もわからずそれっぽい言葉使ってみました感が強すぎる
分かる人が見ればコイツ馬鹿だなってバレバレだからやめた方がいいぞ つまり量によるわけだな。
ScreenUpdating = False しないと辛くなってきたら、それは
ワークシートで管理するデータや式が多くなりすぎたという警告とみなすスタイルが成り立つ。 >>6
えっ?
素人玄人関係なく使うでしょ。
そんなの意識したこと無いぞ。
>>9
量なのかなあ。
そりゃいい加減にコード書くことも有るけど、そういう場合で遅く感じたらちゃんとしたコードに変更するだけだろ。
どうしても描画が何回か走ってチラつきを防止するために最後に追加するぐらいだな。 >>10
ちゃんとしたコードとは?
コードの問題ではなくてデータの問題だ、というのが俺の主張 >>9
ワークシートから値を取り込んだり、値をワークシートに書き出したりっていう処理は、
Rangeを使えば一括して行うことが出来るので、データ量はそこまで問題にならない。
どちらかというと罫線、色、数式みたいな一括処理しづらいものが問題で、
ScreenUpdating次第で処理に大きく差が出る。
こういったものは保守も面倒なので手作業で代替出来ないかとか考えるといいかもね。 オートフィルタかけた後のデータの、特定の1列だけを配列に格納したいのですが、何かいい方法はないでしょうか >>14
SpecialCells(xlCellTypeVisible)で可視状態にあるセルだけを取り出せる。 クラスモジュールって使いますか?
大抵のことはfornext、foreachで済んでしまうのですが、vbaでクラスを使ったほうが便利なのでしょうか >>16
必要かどうかってことなら必要ない
でも大がかりなの作るなら使って整理したほうがやりやすいんじゃないのかな
for文と比較する感覚がいまいち伝わってないから的はずれならごめんなさい
関数とか配列とかと比較するならわからなくもないんだけれど >>17
私が使うのは事務処理で、表を作ったり、リネームする時にマクロを使う程度なのです
クラスはあんまり必要無さそうですね、ありがとうございました >>10
悪いけど素人しか使わんわそんな恥ずかしい言い方w >>13
うん、罫線とかはしようが無いね。
でも罫線もマクロ記録のままの酷いコード書く人もいる。
データについては1つ1つのセルに値を入れるなんてことはすべきじゃない。
普通は1つの表で一括入力でしょ。
どうしても速度を出したい時は汚くなるけどシート内データ全部を一括入力にする。
あとは、使える場面が限定されるけどマルチプロセスにするとか。
>>18
クラスを使う場面ってのは慣れてれば感覚的にぴったりくる。
オブジェクト指向的にぴったりくる場合。
でも、他のメンバーが慣れて無いと却って良くない場合もあるね。 Dim スコーン As New Class
↑このスコーン自体を引数に使うことは出来ますか?
スコーン.Name = スコーン.Name = "スコーン" とか書きたんくないですんけど。 >>24
>>23だと、スコーンの名前はスコーンとか言ってるようなものじゃないですか。
何か変なので、どうにかしたほうがいいなと。 >>25
引数にしたいことと
nameに代入することの関係性が分からない。
まぁ宣言をお菓子にしとけばいいんでない。 PHPならget_class()なんてそのまんまなものがあるんだけどね
vbaには無いっぽいな >>25
あーあ、やっちゃったね
質問するにもマナーってものがあるんだよ
スレを荒ららない為にもこの際覚えておけ
「目的を聞くやつにレスを返してはいけない」 >>28
いつかそのマナー広まるといいね!
影でこっそり応援してぬわ。 なんで目的を聞くやつにレスを返してはいけないの?
質問の意図を汲もうとしているかもよ? >>31
その聞き方だと件の>>28は返事出来ないよ。
理由は察してあげて >>26
クラス名で分岐させたいパターンがある
ゲームプログラムだとclass名で敵か味方か判別する、というのは見たことがあるな
せめて継承でもできればその辺共通化できるんだけど、そこはvba。めんどくさい
しかしエクセルだとどういう状況か思い浮かばない
>>30
してなくて草 >>31
質問の意図が分からん奴は質問に答えられない
目的を聞いても質問者の意図を引きだす事はできない
簡単な事だ TypeName関数で自作クラス名って取り出せないんだっけ? >>37
それはできるけど、Meがない
Meがあればなんとでもできる
標準モジュール
Sub foo()
Set c = New Class1
'これはできる
Debug.Print TypeName(c)
End Sub
'クラスモジュール
Private Sub Class_Initialize()
'これができない
Debug.Print Me.TypeName
End Sub クラス内部で つかうんなら
これじゃいかんのか?
Debug.Print TypeName(Me) >>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 >>39
>>40
ありがとうございます。
それで名前があるものに名前を付けなくて済みます。 >>40
そのコード、
Sub foo()
Set bar = New Class1
Debug.Print TypeName(bar)
End Sub
と同じじゃないの?
>>33
> せめて継承でもできればその辺共通化できるんだけど、そこはvba。めんどくさい
VBEのオブジェクトコンボボックスとプロシージャコンボボックスを選択すれば、
コードを自動生成してくれるから、全然めんどくさくないよ。 俺は今重要な判断を下した
お前らは事務のねーちゃんよりスキルが低い
少なくともうちの事務のねーちゃんより低い事は確実だ >>44
お前、レスもらうのめっちゃうまいなw
思わず反論しそうになった
2chでレスをもらう能力、俺は敬意を表するよ
もしよければ、年齢と性別、職業を教えてほしい。どんな人か本気で気になる 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
このコードの意味教えてくださいー 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 >>48
ugokanai kedo
A1セルの中身が数字に変わった場合、
B1:B9をB2:B10にコピーペースト
B1をA1の内容にする マウスポインターの移動量かマウスのスクロール量を検知って出来ますか? form上の話ならMouseMoveイベント使えばなんとかなるんじゃね?
form以外でならwin32api(GetCursorPosとか)を駆使すれば 最新版のExcelで、ファイルを開いた直後にだけコンパイルエラーが出るようになったから絶対更新しないほうがいいぞ
エラーが出るのは
Function ProcName(cel As Range) As Double
とか、パラメータにAs Rangeを持つところみたいで
一応As Objectに変えてしまえば通るけど、治すの大変だ・・・ 俺のInsider slow バージョン 1704(ビルド8067.2115)では
>>55の情報だけを たよりにやって みたけど 問題ない (xls,xlsm 両方)
とだけ言っておく >>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とするか、モジュールを切り分けるしかない。 >>59
なるほどね
少なくとも 俺の環境下では >>59の条件で xls のみだな その現象が発生するのは
xlsmは 問題ない
つかもう excel2003までのexcel形式(xls)使うのやめたら? と思うのだけど? >>60
全くもって仰る通り。
以前から.xlsmへの切り替えを勧めているが、なかなか全てを切り替えられなくてね。
各個人に持たせているファイルを差し替えろって言ってもメール無視されるし。
あと単純に.xlsmに変えてしまうと
・他のシステムが対応していないせいでxlsしか使えない。
・表の最大値が大きくなったお陰で、既存のマクロだと末端の列列まで処理するループが混ざっていて永久に処理が終わらない。
(そのくらいマクロ直せよ・・)
・ブックのリンクが貼ってあるせいで過去のエクセルファイル全てのリンクを修復しないといけない。
(作ったやつ誰だよ・・)
・データサイズの大きい「共有ブック」をxlsmに変えるととてつもなく重くなる。
(データとマクロ分離しろよ・・)
とか様々な理由があって切り替えが終わってない。
ツッコミどころ満載やで。 いい 切り替えの機会じゃん
xlsは もうまともに 使えません(キリッ
・・・・と言えたらいいねw 変数宣言を一番上に書くと、
確認する時、スクロールで戻るのが面倒なんですが、
Excelなのに、上の方の画面を固定出来るという発想は無かったのでしょうか。
Excelなのに。 グローバルで別のモジュールに書いてウィンドウを並べるとか Excel VBAしかやったことない人が何だか勘違いしてるようだがそもそもVBEはExcelの機能ではないぞ >>63
> 変数宣言を一番上に書くと、
必要な所に書けばいいやん
って言うかスクロールが面倒なほどでかい関数とか書くなよ >>69
何の変数ってのがよく分からんのだけど、
Dim Example As Long: Example = 1
みたいに宣言と代入を上の方でしてるって話?
ローカルウインドウとかその他機能でなんとかならんの? 中身のわからない変数名を付けるからそんなアホな事をせにゃならんようになるんだ
似たような変数名が多すぎてややこしいならfunctionに分ける等、予め余計な手間が発生しないようにするんだ ネタだよな
コードウィンドウ分割するだけじゃねえのって思っちゃったけど
http://i.imgur.com/jnQLIFk.png >>63は赤の他人が書いたクソ長いコードを解析させられている気の毒な人だ
と好意的に解釈しておこう hoge param1:=xxx, param2:=yyy みたいな書き方に慣れないんですが
dummy = hoge(xxx, yyy) とかではダメな理由ってあるんでしょうか? >>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
なんてすると読みづらいだけになる
と言ってる俺も保存の時ぐらいにしか使わないけどね ありがとうございます
事務仕事でExcelVBAをいじる必要があったんだけど
大昔の非構造化BASICやFORTRAN、Cなどの印象しかないので最近の言語は抽象的すぎて分かりにくい >>75
その名前じゃあまりメリットないけど引数の名前をちゃんとつけてたら分かりやすい
あと引数がたくさんある場合に後ろの方の引数を指定したい時とか
Workbook.Open FileName:="test.xlsx", AddToMru:=True >>77
大昔のCって関数と最初の { の間に変数宣言するようなやつ? >>79
そんなやつ、カーニハンとリッチーの第1版、白いカバーの表紙のやつ 変数を宣言しただけでは領域が確保されず
値を代入しただけでプログラムが暴走するんだけど原因に思い当たらず3日間悩んだ挙句に挫折した >>81
上で見たけど、vbaは内部的にかなり変な挙動をしている
newの時点ではメモリ領域は確保されず、初めてプロパティやメソッドにアクセスした段階でメモリ領域が確保される
また、
set foo = thisworkbook
set bar = thisworkbook
は、foo == barに「ならない」
fooとbarは常に違う参照が生成されるので、別扱いとなる
そのコードを教えてくれれば問題解決できると思う
というか後学のためにも見てみたい 日本語も変数として使えるからわかりやすい名前つければいい 日本語は好き嫌い分かれるからなあ
俺は日本語が見易いけどさ google翻訳しながら英語変数使うぐらいなら、日本語使ったほうが絶対に良い Visual Basic Edtor って、単体じゃ入手できないよな?
しかもExcelのバージョン違えば使い物にならんヶ所出てくるし
ThisWorkbook だって、どの?に成るだろうし
Microsoft Script Editer じゃあるまいし、どう考えてもExcelの付属品っつー立ち位置だろ
Excelの「おまけ」機能に決定
Word とか Outlook とかバリエーションは在るにしても >>73
>>63じゃないけど、これ知らんかったわ >>63
C#とかVB.netでアドイン作ればOK。
VBAでもセキュリティに問題出るけど作ることは可能。 Excel VBA で Access と連携する業務システムって、ここの人達的にざっくりどう思いますか。社内システムの改良にアサインされてしまった。 >>92
どう思うって、どういう意味?
別に何とも思わんが。 >>93
前スレ478さんが、VBAでSQLは鬼門って書き込みしてるのを覚えてたもんで、苦労するシステム構成なのかなぁと
Excel VBAの質問じゃないからスレチでしたかね、すんません 苦労するかどうか、VBA以外にもSQL知っておかないといけないような気もするけど… なんでVBAでSQLが鬼門なのか、理由とかあるの? Accessと連携なら、問題ないんじゃ…。
単体だと、更新処理系が面倒。
参照だけなら大差ないと思う。 ExcelVBAとAccessVBAでSQLの構文に違いがあると言いたいの?? >>97
やったらわかる
phpでsqlは黄金パターンでうまくいく。db設計もいつも通り。文字コードはutf8
エラー処理も死ぬほどある
、
C#やVBはかなりめんどくさい、というよりもそもそも使う必要がかったので、前任者の引き継ぎが非常にだるい
つまずく場面としては、具体的には文字コード。shift-jisだと最悪。また、db設計が適当
db接続も何かうまくいかない >>100
要するにお前のスキルが低すぎてVBA程度もロクに使いこなせない、としか理解できない内容だな >>100
その差が大きいとは思えないけど。
vbaでもutf8扱えるよ。
接続はodbcで繋がる。 >>99
SQLのUpdate、Delete、Replaceが駄目。
Excel側のRows().Deleteとか、Replace使えばいいだろって?
遅くないですか、それ。 それはVBAじゃなくてオラクルの問題なんじゃないのか? >>100
君なあ、能力の問題なのか性格の問題なのか分からんが説明が足らんのだよ。
ExcelからDAOを使うかADOを使うかによって変わるのは当然のことだし、ExcelとAccessでどうとか言われてもどういう観点の話か分からんだろ。 というか、文字コードの話が出てくるってことはODBCとかドライバの話まで出てくるじゃねーか。
それじゃあ違って当然だ。 質問させてください。
excelからoutlook起動させてメールを作成するマクロ作ってます。
数パターン用意したテンプレートに任意の文言を置換・挿入してoutlookに渡す?感じです。
動作自体はうまくいってるんですが、なぜかoutlookに渡した本文の文字サイズが12ptになってしまいます。
outlookのデフォルトの文字サイズは10ptだし、12ptになる理由が全く想像つきません...
漠然とした質問で申し訳ないですが、outlook側で設定したデフォルトの文字サイズでメールを作成するようにできないでしょうか?
初心者なので、的はずれなこと言ってたらごめんなさい。 >>109
とりあえずぱっと思いつく原因は、エクセル側が12ptなのでそれがoutlook側に渡っている気がする
テキストだけ渡すようにするか、エクセル側を一時的に10ptにしてメール作成後に12ptに戻すとかで対処できるかもしれない
全然違うかもしれない。コードを見せてもらえたら試してみるよ >>97
>>104 とかの話でシートを SQL で操作する話を言ってるんだろ
あと >>100 は単にディスりたいだけ
PHP だといつも通りの DB 設計が VB/C# だと DB の設計が適当とか C# に挫折した底辺 PHPer の煽りだろ しかしなんで今どきAccessなんか使うんだろ。
SQL Server簡単だよ。Management Studio使いやすいし。 事務的な作業ならAccessで十分だからだろうな。
というかローカルで使えるDBソフトってAccess以外にあんのかな。 >>112
DBMS だけじゃなくてレポート機能とかが欲しいんだろ
>>113
localhost で使えばどんなデータベースもローカルで使えるけど?
サーバーを立てたくないと言うなら sqlite とか
SQL-Server Compact Edition が見捨てられつつあるのが残念 使える人が多いってのは会社では非常に大きなメリット
桐ってソフトを使ってたけど、使える人が少なすぎてaccessに変えることになった
そしてword、てめーはダメだ >>110
レスありがとうございます。
excel側の文字サイズは10ptなので、ご指摘の原因ではなさそうです。
恥ずかしいですが、ファイルをアップロードしました。
ダウンロードキーは「excel」です。
https://www.axfc.net/u/3807959
実行ボタンを押すと、outlookが起動されてメールが作成されます。
ご確認お願いします。 >>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のフォントサイズになる >>118
ありがとうございます。
望み通りの動作しました。
ちなみに、自分の環境では13pxだと6.5ptになってしまいました。(1/2になる?)
あと、>>116で作成したメールのタグを見てみたんですが、「p.MsoNormal...」ってとこのfont-sizeが12ptになっていて、そこを10ptに変更するとうまく表示されるようになるようです。 いまだにptとpx違いがわからない人っているんだね勉強になる >>120
ありがとう本当に気づかなかった
web触ってるとptって単位は記憶から抹消されるわ データベースとの接続処理で一つ教えてください
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 >>122
テキトーに答えるけどByValで受け取った変数に
Set rec = Nothing
しても意味ないと思う >>122
型の不一致の根本原因は (wkR) だと思われ
S_RecordsetClose wkR
か
Call S_RecordsetClose(wkR)
にしる >>123
あ、、、、言われたらそうだ^^;。
それは確かにその通りで、この処理自体の問題だとは思うのですが、引数を受け取る段階で型が一致しないのはどうして?
ちなみにByRefでも同じなんですが。 >>124
リロってなかった
Call S_RecordsetClose(wkR)
でかつByRefにしました。
ありがとです。
動作についていまいちよく判ってないっす^^; >>122
ADODB.Recordsetと、Recordsetの違いじゃないの?
Recordsetって複数あるから省略しちゃうとどれ指してるか分からなくなるぞ。 質問ですがVBAのプロパティやメソッドの扱い方について詳しい入門書はありませんか?
会社でマクロ使うため超入門(マクロの記録からつかうやつ)と学校で教わったプログラム知識(basicとc++)でなんとかやってるんですがやはりVBAの命令の扱い方が怪しく…
予算は2〜3千円程度でお願いします >>128
ExcelとAccessのVBAの本なら腐るほどあるからここで聞かなくてもググれば良い
Word、Outlook、PowerPointのVBAとなると日本語ではかなり少なくなるので教えるまでもなくググれば出てくる
ググって出てこないなら英語書籍やネットブログを漁るか、MSDNを直接参照することになるね >>128
メソッドやプロパティの方から網羅的に学習するのはきついので、やりたいことの方から網羅的に
説明してる本の方がいいと思う。
たとえば、
『Excel VBA逆引き辞典パーフェクト』
http://www.shoeisha.co.jp/book/detail/9784798146584
似たような『○○700』みたいなのがいくつかあるから、どれか選んで流し見するのがいいと思う。 本なんて必要か?
多少の英語カがあればインテリセンスの中からそれっぽいもの選んで実験+Web検索で十分だろ。
あとは、インタフェースへのセンス(絶対この場合だったらこんなプロパティがある筈という嗅覚)とかね。
初心者だったら以下に気を付けてコード書くと良い。
・マクロ記録したらコードの中で必要無い部分をとことん削るのが常識と考えよう。
・それで動作確認して問題無いことを確めよう。
・削って問題無いと思っても、その場では問題無くても場合により問題出ることあるから削って残った部分をWeb検索で皆はどうしてるのかを確認しておこう。
・英語的にそのコードの意味を考えよう。
'A1を選択
Range("A1").Select
'選択したものの値を1にする
Selection.Value=1
だったら当然
'A1の値を1にする
Range("A1").Value=1
ということになる。 >>132
そんな無駄な試行錯誤や調査を、たかだか2,3000円の本を読むだけで省略できるんだが。
入門書とか馬鹿にする人いるけど、たいてい>>132みたいな感じだね。 >>132
デジタルに調べる良さとアナログに調べる良さは別物だよ
アナログだと「調べるつもりもなかったけどたまたま見かけて使ってみたらいい感じになった」ってことはアナログならでは 色々意見ありがとうございます
うちの会社ネット禁止なので本に頼るしかない事情があるのです…
ネット可ならネット検索でやりたいのが本音です >>135
開発環境だけでなくどこからもネットに繋がらないというなら会社に文句をいうべき
煽りではなく >>133
その試行錯誤が無駄かどうか長期的に考えれば分からない 業務なのか自主的なのかで話が変わってくると思うけど、
VBAいじるのにネット無しは辛いなぁ。 >>137
書籍で基本的な知識を学んだ後でも、試行錯誤はするでしょ。
その試行錯誤には意味がなく、>>132のような試行錯誤には意味があるという主張?
だとしたら、それは自分で勝手にやってくださいと言うしか。 おおむかしは、FAXでMicrosoftから資料を引き出していたものじゃ
先ず、目次を引っ張れるFAX番号に掛けて、延々何十枚もの目次をげっと
その目次から欲しい機能を探し出し、今度は欲しい機能のFAX番号へ掛けて
これまた延々と資料を文字通り引きずり出しておったわ
よく覚えてないけど、そんなかんじ
その頃のFAXはB4の感光紙で、うっかり陽の当たるところに置きっぱで
外出したりすると、帰社した時には真っ黒くろすけで愕然と膝から頽れたり >>135
検索できるPCを用意してもらったほうが良い。もしくは自分で用意するか
ネットでその都度検索できないとあまりに効率が悪い >>136
金融じゃ普通だぞ
いちいちググらないとコード書けないやつはお呼びじゃない >>142
金融案件みたいなデスマーチの温床に言われてもww >>142
金融業界にvbaでセコセコやってるやつなんでいねーよwww
帳票システムは全部外注、ボタンひとつで出るようになってるんだよwww
しかもエクセルよりアクセスの方が使用頻度が高い
岡三証券とかは知らんけど なんかさあ…もう少しオープンに自分の無知をさらけ出そうぜ
無知ってそんなに悪いもんじゃないぜ? >>142
金融でもいわゆるOA環境は与えられててネットは見れるだろ >>139
どっちの試行錯誤も意味があるんじゃね
試行錯誤が無駄といったのはそっち 空白と重複をなくしたドロップダウンリストを作成したいんだけど、作業列つくらないと厳しいですか?
A列に重複がたくさんあるものから、重複を削除したリストをB2に追加したいですが、VBAでは厳しいですか? vba使い始めた頃はヘルプに結構お世話になったけどなあ
最近のバージョンだとオフラインのヘルプが入ってないからきついよね
>>128のバージョンもダメなやつなのかな >>149
ループでリストってできるんですか!!知りませんでした。
例えば1〜"A1に入力された数字"までのリストとかも可能ですか??
A1に20とあった場合、1・2・3・4・5・6・・・・20といった感じで。 >>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でもできるけど作業列作ったほうが早いと思う
俺なら作業列を使う >>152
完璧すぎて鼻水でました
ありがとうございます 俺も作業列勧めるな
直値で入れると文字数の制限があるだろ >>149
If 俺 = "イケメン" Then
俺 = 俺 & 彼女
End If >>155
イケメンだったらおまえが消えて新しい命に書き換えられてしまうな >>139
省略する人は試行錯誤を大してやらないよ。
答えを求める奴は結局身にならない。
昔、高校受験用に行ってた塾にいた天才共は英語の辞書を丸暗記してたが俺は天才じゃ無いので英語の使い方(しくみ)を勉強した。
プログラミングもしくみが重要で個々の単語は都度調べれば良い。
本は必要無いと思うけど有っても良いとは思うし、自分もかなり買う方だ。
でも自分が本を買うのは興味からだな。
あ、自分は今はVBAの本を買うことはありません。
初心者なら読んでおもしろそうだったら買ってみれば良いんじゃない? 多分その天才どもは英語の仕組みは既に把握したうえで、
上積みとして単語を丸暗記してるんじゃないか?
仕組みがエンジン、単語がガソリンと考えたら、
エンジンだけでもガソリンだけでも走れない。
効率の良いエンジンは少しのガソリンでも遠くまで走れるし、
沢山ガソリン積めれば少々お粗末なエンジンでもやっぱり遠くまで走れる。
どっちが大事じゃなくて両方大事。 試行錯誤する事で答えが判らない事を解決するスキルが身につく
このスキルはVBAにとどまらない
他のことにも応用できる 本は嘘が書かれてたりするから厄介
想定読者の知識レベルに合わせる理由でいろんな説明を端折ってミスリーディングな表現になってしまってたりするし、著者の知識が根本から間違ってるときもある 結局身に付かないから自分で調べろとかw
ここで聞くってことは理解したいんじゃなくて答えが知りたいだけなんだよ
教える気がないなら黙ってろ >>163
ほら、これが弊害だ。
きちんとアンカー追っていけば初心者がどうやって勉強すれば良いかの話から来てるのがわかる筈。
直近のレスだけ見るような手っ取り早さを求めるような奴には教えても無駄になるだけだ。 >>159
一生、
> Range("A1").Select
> Selection.Value=1
> Range("A1").Value=1
みたいなレベルを手探りで探し出すようなことやってろよ。誰にも迷惑かからないし。
だが、人には勧めるな。 >>166
それが分からないようじゃレベルがうかがいしれるねw
というか、あれを書いた俺がそんなレベルに無いことなんて想像も出来ないのか?
多少出来る奴なら誰でもマクロ記録のままのゴミコードを否定するだろうよ。 >>167
時間が無駄だってことだと思う
お前の技術レベルの話じゃない
物事には期日があるんだからそんなどうでもいいことに時間使うんなら本買った方がいい >>167
コミュ障技術者にありがちなバランス感覚の無さだな
VBAを理解する事が目的じゃないんだよ Validationて何だ?
と思うくらいExcelのオブジェクトのことを知らない。
VBAばっかりだからなあ >>167
> というか、あれを書いた俺がそんなレベルに無いことなんて想像も出来ないのか?
お前のレベルなんか知ったこっちゃない。
> 多少出来る奴なら誰でもマクロ記録のままのゴミコードを否定するだろうよ。
ケースバイケースだし、議論する価値ない話題だね。 >>168
それは答えが判ってる事にしか使えない
仕事では誰にも答えが判らない事を解決する事も多い
答え合わせができる問題で訓練した方が良い 答えが判ってることを効率的に片付けるには
答えを聞いたり調べれば良いけど
答えが判っていない新しいことを実現するには
その方法は使えない
自分で考えずに答えを求める事が
日本でイノベーションとかが比較的少ない原因かもな 新しい何かを始めるにあたって、入門書を読むとこから始めるのが「答えを求めること」なのか >>176
答えは一つじゃないから
入門書にこだわる必要はないな
入門書は何のために読むの?
小説か何か?
自分が判らないことの答えを知るためじゃないのか? >>168
>>169
>>171
>一生、...みたいなレベルを手探りで探し出すようなことやってろよ。
に対してのレスだからコミュ障はオマエラだよ。
そもそもの話のはじまりは>>128だから具体的な案件で期日が既にあるという話じゃない。
コミュニケーションの取れない奴はこれだから困る。 >>178
この流れのそもそもの始まりは、>>128に対して>>132みたいなレスをしたからだ。
そもそも>>128は、おすすめの入門書を聞いてるんだよ。
それを本なんか不要とするからこうなった。 お勧めの本は知りません
をやたら回りくどくやるのなw たしかに>>132はクソレスだな
質問スレなんだから、素直におすす目入門書を挙げれば済む事 横レスだけど128の質問も少し違和感がある。
"詳しい入門書"というのはなかなかないんじゃないか。
128は少なくとも全然vbaが分からないわけでわなくプロパティやメソッドの使い方が難しいと言ってるわけだから求めてるのはもはや入門レベルとは思えない。
感覚としては優しく丁寧に書いてある、という意味かもしれないが。 >>173
それは設計の話だな
実装からスタートする案件だとしたら話は変わってくるけど、、、 逆引き系の本てやりたい事がズバリ書いてある事ってどんだけあるの?
本当に使えるのかいまいち信用できん 逆引きは、逆引きがいらない事に気づかせてくれるありがたい本だよ 勤務表を作りたいと考えています
A1からの各セルにA1勤務開始時間、A2勤務終了時間、A3休憩時間と入れたら
A4からの各セルにA4割増無の勤務時間、A58時間以上の勤務時間、A6休日労働時間、A7深夜労働時間
とVBAを使用して入れたいのですがA7に入れる深夜労働時間の求め方が思い浮かびません
深夜勤務は22:00〜5:00の間なのですが21:00〜4:00、18:00〜6:00みたいな勤務の場合どうやって深夜労働時間を求めればいいのでしょうか? 昔作ったなぁ
まず概念として、
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
無能の自己紹介はいらないよぉ 以前、ここでシフト表を作りたいって人がいて、んで別スレまで出来てあれこれ皆が頑張っていたけど、途中で多分本人がやる気なくしてw
アボンだったな >>193
残業代(金額)が、労働時間-8時間(時間)
とかw
好意的に解釈して残業代じゃなくて残業時間だとしても
-8時間かどうかは就業規則を読まないと判らないだろ >>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
おかしかったら誰か直して〜 ?cells(1,1).Address
で絶対参照の$A$1は取得できますが、
行のみ相対参照の$A1を取得する方法はありますか? Range.Address プロパティ (Excel)について質問です
AddressはRangeオブジェクト内の関数ですが、vbaだと、値を取得する場合はプロパティと呼ぶのでしょうか?
引数があってもプロパティと呼ぶのですか?
他言語ではオブジェクトのメンバを直接取得したり値を設定するのがプロパティ、式がメソッドと思っていたのですが、
vbaが特別なのでしょうか。それとも他にこういう区分けの言語はあるのでしょうか
http://piyo-js.com/01/keyword.html プログレスバー使ったら値更新するたびにフォーカス奪うようになって別ウィンドウで文字入力とかスクロールしてると邪魔される
せっかくの長い処理中に別作業できるメリットが損なわれるようになってしまって困ってるんだけど何か解決策ないでしょか…?
プログレスバーないと処理中不安になって長く感じるのでできれば使いたいです
ちなみにWindows7上で使ってるExcel 2010です >>201
Addressは要はgetterですよね
Rangeクラス内部から見ればメソッドのように見え、クラス利用側から見るとメンバ変数のように振る舞いますが、
実態はString型の変数を返すメソッドでふ
メソッドがパラメーターを持つのは普通のことじゃないですかね >>201
引数つきのgetter/setter(プロパティへのアクセサ)を作れるかどうかは言語仕様によります。
VBでは作れる、というだけの話 >>205
自作クラスで言うと、
property get/set/let で定義するのがプロパティ、
sub/function で定義するのがメソッド。
range.addressみたく、getだけ定義されているプロパティとfunctionは外から見たら同じようなものだし、気にする意味がないと思う。 >>206>>208
なるほど、ありがとうございました
色々な考え方があるのですね
>>207
韓国産でしたっけ?危険ですのでやめたほうが良いと思います
お金のために健康を捨てるのはもったいないです >>202
ステータスバーに進捗状況を表示するようにしたら? VBA勉強中の初心者です。
最終的にやりたいのはテキストエディタから一部データを抜き出すのをしたいんですが抜き出し方がわかりません。
メモ帳にログが取り込まれてそこから必要なデータを取り除きたいです。
コンビニのレシートがデータしてるものと考えてください。
それでそのレジの最後の一台当たりの発売金額がわかるんですけど発売金額を抜き出したいのですが何をどうしたらいいのでしょうか?
まだ変数と制御構文くらいしか理解していません。 >>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 おお!ありがとうございます。
これを元に一つ一つググりながら理解していこうと思います。 >>211
VBAからADO使ってログファイル読み込みその際にSQL使って絞り込み
>>212
fooを使うんじゃねえhg >>214
何でテキストファイルを読み込むのにSQLとかADO使うの? HYPERLINK関数(mailto:)を使って、メールを送信するシートを作成しました。
B2からB30セルまで、ハイパーリンクが設定されている状態です。
この、B列に並んだハイパーリンクを全てクリックして自動で実行したいのですが、どのようなコードを使えばよいのか分かりません。
Hyperlink.Followメソッドでは、関数によるハイパーリンクを開けないことは分かったのですが、何か代替手段はあるでしょうか? >>218
なぜハイパーリンクしてるの?
VBAでセルの文字列データを取得して、それを使ってふつうにメールアイテムを作成して送信すれば良さそうだが >>220
それはあらゆる場面において最低の解法
なぜかは自分で考えてね >>221
横からだけどさっぱり分からない
教えてください >>216
>>211見てなんで使わないと思ったの? >>221
あらゆる場面で、というのは随分と強い主張だな
シートのUI上でハイパーリンクを設定すべきかどうか、コード側でメールアイテム作成を制御すべきかどうかは設計次第だろ >>193
>>205
ありがとうございます。入力フォーマットが既に決まっていて変更できず休憩時間を手入力させるのは難しいです
21:00〜6:00の場合、22:00〜5:00の時間が何時間含まれているかわかればいいんですがいいロジックが思い浮かびません
今思い浮かんだのは1ヶ月間を0〜744時と考えて、24(n-1)を足せば求められるんではと考えてしまいます
あと今日VBAでSQLのクエリ文を作っていたのですがString型って文字数制限があるんですか?
それにに引っかかったみたいで途中クエリが消えてしまい原因がわからずかなり苦戦しました >>224
何でテキストをsqlで読もうとするの? >>226
数式読みなよ、全部書いてる
http://www.dotup.org/uploda/www.dotup.org1258917.xlsx.html
あとstringに制限は事実上ない
一旦varchar(255)辺りに入れてない?テーブルの制限に引っかかってる気がする >>227
>>211見てなんで使わないと思ったの? SQLはOracleに代表されるようなDBMSを制御するための言語 ExcelでもDMMSを相手にして使えるがそれはDBMSあってのこと 別にADOは便利なツールとしても使えるだろ。
けど、俺もテキストエディタだったらもっと単純にゴリゴリしたの考えるな。
LeftとかMidとかRightとかInstrとかInstrRevとかを使ったようなの。 あっ、テキストエディタ作りたいんじゃ無くて、テキストからデータ取り出したいだけ?
だったら、やっぱりMidとかInstrとか基本的な関数で十分な気がするね。
>>211
発売金額はテキストの中でどんな風に位置してるの?
例えば10行目の20文字目から10桁みたいな感じ? >>211
あと、何でメモ帳使いたいのかな?
別にメモ帳上でいろいろ操作することも出来るけど、少しだけ高度になるんだよね。 >>219
ありがとうございます!
リンク先に記載のコードを試してみたのですが、残念ながら「指定されたファイルを開くことができません」のエラーが出てしまいました。
普通にセルをクリックするとメールが立ち上がるのですが、vbaを使うと、このようになってしまいます…
>>220
大変レベルが低い話なのですが、
滅多に触ることのない超初心者のため、作る労力とメンテナンスのことを考えて、できることは関数ですませ、vbaは最低限にしている次第です。 >>236
「ハイパーリンクをクリック」
逆に難易度が上がってるぞ >>236
>>219の方法でやるなら
HYPERLINK関数の 第二引数を省略した形で Evaluate しないとだめよん
よって
・元々の HYPERLINK関数で 第二引数を省略してしまう
・VBAで HYPERLINK関数の第二引数をカットしてからの Evaluate
のどっちかにするしかない
がんばってね >>238
第二引数を省略したら、無事にメール作成できました!
今の自分のレベルでは、仕組みが理解できていませんが、本当に助かりました。
ありがとうございます!
>>237
こちらの方がレベルが高かったのですか…
そういったことの判断すらできず、vbaでノーツメールを直接作るコードを調べてみて、複雑そうなので、諦めてしまっていました。
もう少し勉強しようと思います。 >>239
クリック等のイベントをトラップしようとすると、既定オブジェクトのモジュールやクラスモジュール等にコードを書いてハードコーディングしなきゃならなくやる
イベントの発生タイミングを考えてエラー回避の制御なども追加しなきゃならない
イベントはコードディングと保守の難易度を上げる、と認識すると良いよ
メーラーアプリのオブジェクトインスタンスを作成して操作するやり方は一見複雑そうだけど、やってることはエクセルの既定オブジェクトの操作と一緒
基本的には標準モジュール一個でコードが収まるから楽だよ >>240
別にそんなにハードル上がってるわけじゃないでしょ。
こういう場合、自分はまずメールを作るプロシージャを作る。
それはメールに必要な宛先、タイトル、本文等の引数を元にしたプロシージャとなるだろう。
そして当然汎用的なものだから標準モジュールに書くことになるだろう。
後はそれをどのようによび出すかを考えれば良い。
B2からB30までのアドレスを元にメールを作るのだからメニュー(コマンドバー)から呼び出すとかシートに貼り付けたボタンから呼び出すとかが考えられる。
呼び出す処理ではB2からB30までのループ処理の中で標準モジュールに作ったメール作成プロシージャを呼び出すようにすれば良い。
尚、この場合ハイパーリンクはプログラムと関係が無い。
個別に開くために設定しても良いし、設定しなくても良い。
単純に空のメールを一度に複数開きたいだけならハイパーリンク使う方が簡単な気もするけど、そんな需要で完結するとは思えない。
だから自分だったら両方作って片方をコメントアウトしとくだろうな。 >>229
> >>211見てなんで使わないと思ったの?
なんでって普通使わないから。 >>241
メールアイテム作成が複雑そうと言ってるのは質問者なので、そこは間違えないでね VBAに滅多に触ることのない超初心者になに難しいこと語っちゃってんだよw データの取り出し方とか質問するならせめてデータ構造の例ぐらい出しておかないと返事のしようがないような テキストファイルをSQLで扱うときってどのドライバを使うもんなの? >>248
> テキストファイルをSQLで扱うときってどのドライバを使うもんなの?
だから、普通はしないってば。
相手がCSVならかろうじてする場合もあるかもレベル。 いや、だから便利にADO使う場合もあるってば。
例えばUTF8の読み書きとか。
他にも色々利用できるものがある。 >>251
例えばネットからファイルをダウンロードする場合、普通はURLDownloadToFileを使うと思うが認証付きの場合はADOが使える場合がある。 名前の判別でRかLのはいったやつを分けるマクロが書きたいんですがRとLは,かスペースに挟まれてるか最後一文字です
ただし最後一文字ならその前にスペースが入ってます
こういう場合スマートな判別ってどうしますか? >>247
まぁそうだけど大体ログと言えば規則的に並んでいると推測できるよね
視野が狭い人多い
そもそも>>211と>>216をよく読んで理解せずに発言してる人多過ぎ 煽ってるわけじゃないが、>>211は全力で意味を理解しようと思って読んでも
どういう状態を説明しているのか、よく分からなかった(特に後半)
みんなスゴイね(まじで) >>255
>>212のように正規表現がいいけど
細かい話をするとスマートが何を指しているのか
早さとかコードの見た目とかね
>>258
ド素人の言い回しって大体わかるじゃん?たまにぶっとんでるのいるけど
だいたいこういうのは、CSVで出力されたPOSデータの計行のみ抽出したいってぱとぅーん
だから>>214、もちろんその後でMIDとか使う必要はあると思う >>258
分かってない奴の事を分かっていないで理解しようとしないから
タイヤブランコみたいなのが出来ちゃうんだよww >>259
正規表現は何がスマートなのか
早さ?がスマートな例は
コードの見た目がスマートな例は
たった3種類なんだから答えてあげれば? >>262
お前がいじわるなつっこみするから俺もいじわるしただけだ この件で言えばスマートなのはどう考えても正規表現だろう
ifやmidで無理矢理解決するのは力技ではなく、単に勉強不足だ マにありがちな意地悪なw
突っ込まれたいとか>>263ホモ警報w >>267
255の正規表現を誰かが書くと、とたんに俺が書いた正規表現の方がスマートだ合戦開始の流れだよなw midとかifだと、検索対象文字列のパターンが変更されたらいちいち検索処理の制御構造を変えなきゃならないかもしれない
正規表現だったら大抵RegExpオブジェクトのプロパティの設定値を変えるだけで修正が終わる 俺なら正規表現とか難しいのわかんないからこれで済ませちゃうな
スマートさのかけらもないけど
Function isRL(str) As Boolean
isRL = str Like "*[, ][RL][, ]*" Or str Like "* [RL]"
End Function >>270
それだと
,R_
みたいなのも反応しちゃうような
_はスペースね
これも全角半角スペース区別とか不明だからまあ >>271
日本語がどっち指してるかわからなかったからそれも含まれると解釈したんだけど
それ入らないならOrいっこ増やすだけだし
もちろんもっと複雑さが増してくれば正規表現調べようって気にもなってくるけどね >>272
>>263と同じで突っ込みたかっただけ、めんごめんごw
あとLikeだと大文字小文字区別しないよね、だから
RLもrlも混同してしまうマッチだけにwww >>273
おまえいいやつだな
それでも突っ込むとOption Compare Text書いてなければ大文字小文字区別するよ >>276
だってせっかくこれ言いたかったら間違えたのに
誰も突っ込んでくれないからさ
>RLもrlも混同してしまうマッチだけにwww >>257
そりゃそうだが、たまに意味わからん形式のログあったりするし
説明のしやすさに直結するだろ いろいろな意見ありがとうございます
釣りではないですが正規表現で良さそうとは感じていました
ただ正規表現の書き方がわからなかったのと本当に正規表現が一番適した書き方かわからないのでああいう聞き方になりました
なんか混乱させてしまったようですみません 正規表現が良いとは限らんよ。
構造を元にした固定の場所の方が良い場合もある。
だからデータの中から取り出したい値がどの様に配置されてるかが重要。
質問する時に出来ればそれを示して欲しかったね。 >>282
ごめん。
>>255で書いてあったか。
正規表現だね。 初心者です。
ユーザーフォームを最近覚えて作成中です。
中身はとりあえずメッセージBOXで工事中にしてユーザーフォームを凝ってみようと思うんですけど
いい見本とかありませんか?
アプリっぽく作ってシートへのハイパーリンクで満足しようかと思います。 >>250
> 例えばUTF8の読み書きとか。
それは、ADODB.Streamを使うということであって、SQL(クエリ)を使うということじゃないよね。
故意になのか無意識なのかしらないけど、それを混同させてどうしたいのか。 >>286
イマイチ何がしたいかわからんが、
よく使われるもの、googleかamazon辺りを参考にしてみては 昨日正規表現で質問したものです。
リファレンスブックを読みながら正規表現で[,\s]R[,\s$]ってな感じで検索して
マッチした数値>0で分別ってプログラムを組んだのですが、一つ問題が…
取得した文字列の最後が,Rとなっていたときに反応しないです…
正規表現としてはこれであっていると思うのですが何か勘違いしてるんでしょうか? >>289
こうだとうまくいく
[,\s](R[,\s]|R$)
[]内に$はダメなんかね >>289
文字列の最後としての $ は文字じゃないから [ ] の中には入れられない
(入れると文字としての $ と見なされると思う)
> 名前の判別でRかLのはいったやつを分けるマクロが書きたいんですがRとLは,かスペースに挟まれてるか最後一文字です
これちょっと曖昧
",R," とか " R " はいいとして " R," とか ",R " もいいのか?
とりあえずいいとしてスマートかどうかを問わなきゃ
"(?:[\s,][LR][\s,].*|\s[LR])$"
辺りでどうか >>289
勘違いしてます
([,\s][R][,\s]?$)
あとそれだと、,R,だけじゃなくて,R_みたいなのも反応するけどいいの?
って聞いたんだけどお前全然人のレス読んでないのなw 質問者 >>255 (ドコグロ MM3f-fCG8) ID:iQOaaYC+M
回答者 >>291 (ドコグロ MM3f-ijLw) ID:I1+YwiguM
やはりお姉さんの言った通り(>>266)釣りだった感 回答ありがとうございます
[]内に$は受け付けないんですね…
,R_は信じがたいことにそう入力されてるデータを見つけてしまったので分別に必要です。
なんか荒れに荒れてる感じですいません…
とりあえず私は質問しかしてません 荒れてないから大丈夫
ただそろそろスレから退散した方が、不愉快な思いをしなくて済むとは思う >>287
ああ、すまん。
俺は>>233でADOの観点で絡んでた。
確かに元々の話は何故SQLって話だね。 >>253
使えるってだけだよ。
Schema.iniを使わないと、
勝手に型を決めやがるから、物凄く使い勝手が悪い。 当たり前だ
その技術がなければバグだらけのコードになる $$$4.3$$$
"V"="1.3335412","0","1","3Q", マクロ初心者ですが質問させてください。
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 >>306
とりあえず走らせたけどエラーでなかったよ
どこで出るの?
そもそも何をしたいの?
元々あるのはsheet1だけとして
sheet2のA1にB1-B699貼り付け
sheet3のA1にB700-B1399貼り付け
ってこと? >>307
699毎なのでB700-B1398じゃね? 失礼しました
説明が間違ってました。
エラーではなくて、A行もコピーしてしまうのでB行をA行にコピーしたいです。
まさに、>>307-308さんの言ってることをやりたい形です!!
ちなみに別bookにコピーする場合は、
どういった記述にすれば良いのでしょうか? >>309
A列に貼るようにするなら
"R" & n & "C2:R" & n + 699 & "C2"
に変えるだけかな >>309
こんな感じかねぇ
http://www.dotup.org/uploda/www.dotup.org1264912.zip.html
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 そういや昔はsetがさっぱり意味不明だったな
今は普通に使えるけど、なんだったんだろう >>316
理由教えてくれよ
理由がなければ使い続けるぞ。名前考えるの一番めんどくさいからな >>317
>名前考えるの一番めんどくさいからな
代わりにわたしが考えたよ
hogeでよろ
これでもう考える必要ないよ
>>318
そうです
>>319
生理的に無理 ピリピリしてるハゲってなんていうか、微笑ましいよな
ハゲ好きだわーオレ、なりたくねーけど >>321
hogeがfooにまさるメリットとは?
先にfooのメリットを書くと、
・文字数が少ない
です >>323
じゃあ f だけにして
・文字数が少ないよ >>324
fooは慣例の単語
それを不必要に削ると無駄な間違いが増える
揚げ足取りしか出来ないなら使い続けるね そもそもhogeとfooが何なのか分からん。
C言語のスタジオえっちみたいなものですか? >>325
Sub foo()
としか使ってないのに、なんの間違いが増えるの? 4〜3月の売上をまとめて円グラフで描画したいんですがどう描けばいいのかわかりません
そもそも各月の売上をまとめて円グラフで描画しようとするのが間違いでしょうか? ヒソヒソ( ゚д゚)ヤダァ(゚д゚ )ネェ、キイタ?( ゚д゚)オクサン(゚д゚ )アラヤダワァ ハゲテルノニExcelツカッテルンデスッテ! シツレイシチャウワネ >>329
はい
扇風機なら夏、おもちゃなら必ず12月が伸びるので毎年同じ形になる円グラフは向いていません
折れ線グラフで前年度、その前の年度を重ねて昨年度対比にするとわかりやすいと思います >>332
結局「なんとなく嫌い」以上の理由が一切ないの?
申し訳ないがそれでは従う気にはならないなぁ >>333
ところで何であなたワッチョイの後半部分ころころ変わるの? >>334
だから何www
>>335
知らないよ。プロバイダはio光。別に回線を繋げなおしたりはしてないよ >>336
eoだろ
無駄な間違いが増えるとか言ってる割に2文字すら間違えるっていうwww これからは Sub foo()って書いとけば馬鹿避けになるのね。了解!! >>337
(ノ∀`)アチャー
Sub fooをNGにしてるなら>>336は本来見えないはずだけど、連鎖NGしてないの?
連鎖NGしないとNGの意味がないからさっさと設定しようね
透明あぼーんがオススメだよ >>338
という結論以外でなかったね
大体予想してたけど、無意味な結論にたどり着くというのも有意義なことだ >>341
実は>>337でひっかかることを予想して>>339は>>336の直後に書いてたんだよ
ほんとは>>337の5秒後以内に書き込みたかった。リロードしてる内にめんどくさくなった
1分空くと後付っぽい? >>340
同意する
ID:YdL4iPz30
さよなら。
また来世でな >>342
悔しいの?www
後付けかどうかより
>リロードしてる内にめんどくさくなった
お前は面倒発言ばっかりだなwww >>344
vbaなんて仕事が面倒くさいから習得するもんだろう
それ以外なんかあんの? >>345
vbaじゃなくてVBAってちゃんと大文字で書け >>339を>>337の数秒後にレスできたら完璧だったんだけどなぁ
これはちょっと悔しかった。予想以上にレスが遅かった。見え見えの釣りに飛びつくと思ったら2分もかかるとは
俺の実力も足りんし、忍耐力も足りなかった
申し訳ない
>>346
なんのために?vbaって書いてそれで誰か損してるの?
じゃあ書いてやるよwwwVBA!VBA!満足かwww だから>>347が見えるってことはNGにしてないってことなの
何回引っかかるの すぐ消すテストプログラムをfooとかにしたことはないなあ。 >>350
ほんとに一時的なら t とか x とかにしてるわ >>310,311
亀レスですいません!!!
できました!!!!
ありがとうございました!! 誰かアドバイスおばお願いできませんか
野球関連の仕事をしているんですが、選手成績のデータをcsvで貰っていて
それを自分の所のcsvに入力しないといけないんですが、いかんせん数が膨大でデータを
並び替えやら抽出やらで変換したいんですが、この場合に覚えた方が良いプログラムってのは
エクセルでマクロを組むってのが手っ取り早い近道なんでしょうか?
それともほかのプログラム言語を覚えてソフトを開発って手も考えた方が良いのでしょうか? >>355
「自分の所」って?
一人で自由度が高いならSQLServer Express入れるのが一番だと思う。
タダだし将来性もある。難しくもない。 >>356
正確に言い過ぎると微妙な案件だと思って濁し気味なのですが、貰っているデータというのは
プロ野球のデータ提供サービスのBISと言われるデータ提供会社のcsvで
『自分』というのは自分の会社で使っている野球中継用のソフトとなります。
(野球中継用のソフトもcsvでデータを賄っているのですが、当然フォーマットが違うので
貰ったデータをもとに普段は手入力しています。)
>>357
確かに膨大というのはSEさん達からしたら笑ってしまうレベルの数なのでしょうが
限られた時間(集合時間から試合開始までの時間)で手入力で間違いなく必要項目を入力するという問題なので
プログラムにまかせて一括変換できるのなら、間違いも少ないでしょうし、オペレーターの習熟度に左右されずに仕事につかせやすいので、
非常に有益な事だと思ったのです。
本来なら仕様を出して、プログラム作ってもらえば済むことなのかもしれませんが
自分の所で使っている野球ソフトも仕様変更でcsvの項目順番とかずれる可能性もありますし、
提供してもらっているデータも仕様変更とかで順番ずれたりした時に毎回発注とかしたくないので
急ぎではないし自分で作れる様になりたいなと思って相談させてもらいました。 必要なデータ抽出して、並び替えて、別ソフト用のCSVに変換するってことかな?
エクセルでもできるだろうけど、自分ならC#かPowerShellでつくるな
エクセルを介す必要性がないからわざわざ使いにくくてめんどくさいVBAでやることもない
初心者にはちょうどいいお題だと思うからプログラム作ってみたらいいと思うよ どなたか助けてください
ブック内の約200シートを全て個別のcsvファイルに保存したいのですが、
うまくいきません。
エクセルファイルと同じフォルダにシート名+".csv"という名前の
CSVファイルを作成することが条件です。
ググって
下記は出てくるのですが、実行してもエラーが出てしまい
CSVにはき出すことが出来ません。
(こちらの環境がMacだからなのでしょうか?)
どこを修正すれば正しく、csvにはき出せるかご教示ください!
Sub SaveCsv()
Dim mySheet As Worksheet
For Each mySheet In ActiveWindow.SelectedSheets
ActiveWorkbook.SaveAs Filename:= _
ActiveWorkbook.Path & "¥" & mySheet.Name & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
Next
End Sub
エラー文
実行時エラー '1004':
'Sheet183.csv' にアクセスできません。 >>361
ありがとうございます!
ただ直しても同じエラー分が出てしまいます。。。 >>358
AccessなりSQL Serverなりのデータベースソフトでcsvのインポートを試行錯誤してみればすぐに出来るようになる。 >>362
SaveAs行の前に、mySheet.Selectを追加してみて >>364
できないですね、、、
実行時エラー '1004':
‘選択中のシート名.xlsx' にアクセスできません。
と表示されます。 >>355
perl PHP 辺りが簡単だし便利なモジュールも沢山ある >>355
sqlite3と
firefoxのsqlite3用アドインとかと
SQL言語を使う方法もある 単なる当てずっぽうでCSVファイル作成前に同名のcsvファイルが既にあるんならそれを消すなりリネームするなりしてるか? 数MB程度のテキストデータならピボットでいいと思うが みなさん沢山のアドバイスありがとうございます。
言語的にはどれとってもほぼ確実にできるけど、道が沢山ありすぎる状態なんですね。
関数電卓のBASIC程度しかかじっていない軟弱な頭にはどれがとっかかりやすいモノなんでしょうか・・・ >>369
空フォルダなのでファイルは存在してないんですよね、、、 >>371
Excelだったらすぐに試せるだろ
すぐやれ >>360
ぐぐるんじゃなく自分で作れるようになると楽だよ
Sub foo()
Application.DisplayAlerts = False
For Each シート In ThisWorkbook.Worksheets
シート.Activate
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & シート.Name & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
Next
Application.DisplayAlerts = True
End Sub
>>371
エクセル+vbaがいい
諦めなければ絶対に完成する。諦めるな
わからなくなったらいつでもおいで >>374
> 諦めなければ絶対に完成する。諦めるな
仕事でやってる人には最低のアドバイスだな
ニートのお前とは違うんだよ
仕事ってのは限られた時間の中で最大限の結果を求められる
少しでも人の役に立ちたい気持ちはわからないでもないけど
それ以前に自分がニートだっていう事実を忘れちゃいかんな
お前が本当に誰かの役に立ちたいのだったら
まず自分の身をわきまえ
そして相手の立場を理解するって事が何よりも大切な事だ
よく覚えておけ >>375
まじでそう思う。
>>375
反省して
ソリューションはどこに記載? >>375
じゃあ諦めて手作業で延々と作業しろってことか
効率的だな〜 >>377
少しはわかったみたいだな
効率>>>>>>>>>>>>>>自己満足
仕事ってそういうもんなんだよ まぁ実際、出来るかどうか分からないVBAよりも、手作業で確実に済ませるという場面は仕事してると出てくるな。
ただ件の話はルーチン業務のマクロ化についての話だから、多少時間が掛かっても挑戦する価値はある。
しかしながらごく一般的な悩みで、それを解決する手段が用意されているのでVBAに拘る必要がないのも事実。 マクロの腕上げてどんどん効率化したほうがいいと思うけどねぇ
会社行ってもすること無いから出勤時間減らしたわ ありがとうございます。
取りあえずエクセル環境で動くとどの現場でも楽になるので
エクセルマクロでどうにか作ってみます。また、来ざる得なく成る様な気がするので
その時にまた相談に乗ってください。ありがとうございました。 Excelが必要でないならVBAよりはVBSscriptかな
VBScriptはExcel VBAにほぼそのまま持っていける
VBScriptやVBA扱いに慣れたらpowershell
いきなりpowershellでもいいけど前提知識が割と必要になる
powershellの良い入門書って見たことないし >>374
まだ懲りずにfoo使ってるのニートさん
あ、NGしてないのバレちゃうwww >>379
ウチの会社の場合、マクロ書いてると「そんな暇があったら直接打ったらいいじゃん」と言われる。バカは手作業こそ
仕事だと思い込むもんなんだよな。 >>360
- ActiveWorkbook.Path & "\" & mySheet.Name & ".csv", _
+ ActiveWorkbook.Path & ":" & mySheet.Name & ".csv", _
こうじゃないかな? >>360
Sub Example
MsgBox Application.PathSeparator
End Sub
これ実行すると多分¥じゃなくて:が表示されるはず セルの書式を保持したまま変数に格納する方法ってありますか?
文字の一部分だけ太字とか、嫌がらせみたいなデータがあるんです。
Copy Destinationで別のシートに格納しろ、とかいうのはなしで。 格納だけならsetで簡単にできる
しかし他のセルにこれを適用しようとするとフリーズ。理由は知らん
割りと真面目に
>Copy Destinationで別のシートに格納
したほうがいい気がする
Sub foo()
'A1の一文字目のフォント情報をB1二文字目に
Set bar = Cells(1, 1).Characters(Start:=1, Length:=1).Font
Cells(1, 2).Characters(Start:=2, Length:=1).Font = bar
End Sub >>389
オブジェクトの変数へのコピーができないから無理。
見えないシートやワークブックを一時的に作って、Range.Copy じゃだめなん? >>388
ああ、言ってる。でも延々と手作業でやって残業時間自慢してるヤツが殆どw VBA初心者です。
今データの分析をしてるのですが色々な関数を使ってるシートをとりあえず10000くらいまでデータを作っておいてピポットテーブルで分析しています。
それだとデータが重くなりますが入力されたデータに行をオートフィルで追加することはできますか?
例えば
A列に日付 B列に店名 C列に商品名 D列に個数
を入力していて
列やG列に日付の関数で月やH列にVLOOKUP関数で店舗の種類の仕分けをしています
データを入力した行に関数が自動で追加できるようにするにはどうしたらいいでしょうか? >>393
イベントを使うといいと思う
例えば4列目に入力があったら5〜7列目がオートフィルされるようにするなら
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 3 And Target.Column = 4 Then
Range(Cells(Target.Row - 1, 5), Cells(Target.Row - 1, 7)).Select
Selection.AutoFill Destination:=Range(Cells(Target.Row - 1, 5), Cells(Target.Row, 7)), Type:=xlFillDefault
Target.Select
End If
End Sub Excelの機能でやった方が良さそうに見えちゃうな
月で集計は列足さずにピボット側で日付をグループ化すればいいし
範囲の拡張はデータ範囲をテーブルにしておけばいいだけだし
VBAスレだしVBAでやりたいんならまあいいか 補助列作っとくのが最善だと思う
次点でピボットの集計フィールド追加 >データを入力した行に関数が自動で追加
したいだけなら、テーブルにすればいいのでは
Excelのテーブル機能の使い方まとめ
https://www.forguncy.com/blog/20161014_table
>一覧表の最終行の次の行にデータを入力すると、その上の行に入っている書式設定が自動で反映されます。 計算式も自動で反映します。 >>360だけど未だに出来ない、アドバイスいただいたものも全てダメしたけどダメ。
200枚ものシートをいちいち手作業でやらないといけないのか、、、 >>399
Excelのバグじゃないというのは確認したか?
アプリケーションの更新とかが出てたりしないか? >>400
エクセルのバグ確認の仕方を知らないので不十分かもしれないですが、
アプリケーションは最新なので、問題無いとおもいます。 >>360です
お騒がせしました、これでできたっぽい。
http://excel-magic.com/post-24/
<font color>のどこを修正すれば良いのか分からないので、ひとまず回して見ましたが途中で止めてCSVを200ファイルほど吐き出せました!
これを機会にVBAをちゃんと勉強しようと思いました、、、 >>401
じゃ、マクロを記録しつつシートをCSVで保存してみて、生成されたコードを観察してみるとか。
今回1度きりの作業だったらあきらめて手作業でエクスポートするか、それが嫌なら他のQAサイトで
質問するとか。 >>402
マジか・・・
何がいけなかったんだろうか・・・ >>402
うまくいきそうで良かった。
リンク先を見てる感じ、
ActiveWindow.SelectedSheets
ActiveWorkbook.Path
のどっちかがcsvを保存した時点でおかしくなってるのかなと感じる。
あと、<font color="#ffff00">と</font>はVBAには無関係なので、丸々削除してオーケー。
詳しく知りたければ、「htmlタグ フォント」でググってみてね。 >>404
お忙しいところ、ご教示いただきありがとうございました。
>>405
なるほど、また使う事があると思うのでその部分を修正して、
ちゃんと使えるものになるようにいじってみます!
タグの件もありがとうございました! >>355
エクセルvba以外を選べる環境があるなら選ぶ必然がないけどな
初心者向きに見えて初心者向きじゃないから
といまさら >>408
VBAしかやったことないから他の言語との比較ができないんだけど、一体どのあたりが初心者向きじゃないと感じるんだ? >>409
とにかく変なルールや仕様が多すぎる
・まず前提条件として、エクセルについて理解する必要がある。仕事で使っていれば嫌でも覚えるけど、学生にとっては辛いところだろう
・標準モジュールが初期状態で存在しない。初心者が大きくつまずくのはここだろう。コードが思い浮かんでも、どこに書けばいいのかもわからない
・上記の続きで、スコープも変則的に見える。sheet1にコードを書くとなぜsheet2が見えないのか?はスコープ、privateやpublicの概念を先に知っておかないといけない
初心者からみたエクセルなんてどうみても全部publicなのにな
・まずシートをselectするかactivateしないと、rangeがselectできない。糞仕様です
・エラーが大雑把すぎる。
修正候補:式
って言われても、大抵の記述は全部式だろう。式のどの部分だよ
・
if
for i = 1 to 2
endif
これで出るエラーは「endifに対応するifがありません」そっちじゃねー!!!
・マクロの記録もあやふや。グラフやオートシェイプは記録したマクロを走らせるとエラーになる始末
他にもオブジェクトの塊なのにオブジェクト指向が全くなかったり、ダンプもできない、今更Bライクとかええやろ、など他にも色々あるけど 違う言語に対応できない初心者の愚痴で草
とりあえず何にでも文句言ってんだろうなって印象 なんか大部分がVBAじゃなくてエクセルの仕様な気が。 実際そこだと思う
エクセルに拘る理由が無いならVBAに拘る理由もないし >>410
だいたいエクセルも知らんやつがなんでいきなりエクセルマクロやろうとしてんだよw
「エクセルvbaでプログラミングを学ぼう」みたいな風潮が諸悪の根源なんだよな
そういう意味では>>407の言うことにも一理あるわw 初心者向きやりたいならVB.netでもやりゃいいのよ
プログラム言語としては不親切極まりないのは間違いないだろ、VBAは
機能拡張も期待できないし
敷居は低いが不親切 プログラミングなんて、変に凝らなきゃそこそこの処理ロジックは誰でも作れるよ。
でも入出力が楽にできるGUIが欲しいとか、プログラムに食わせる制御データの管理を手軽にしたいとか、
日常使いのアプリとして便利にってなるとExcelになっちゃうんだよね。 >>411
一般事務のデファクトスタンダードなのにあまりに酷いとは思う
さすがにバージョンアップしてほしい。エクセルは進化してるけど、vbaはvb6.0以下だろう
>>414
エクセルもそもそも自由度が高すぎる。テーブルで大分機能的には落ち着いたけど、肝心のテーブルが使われていない
とりあえずセルの結合だけでも廃止してほしい >>417
それはエクセルが優れてるからというより、ワードが糞過ぎるからワードの守備範囲までエクセルでカバーせざるを得ないだけだろう ワードなぁ・・・ワードはずっと扱ってないよ。いくつかの会社の人に聞いたけど、やっぱりワードは糞
しかし唯一、日本を代表する金融企業の人と飲んだ時、その人が喜々として語っていた
その企業はエクセルもアクセスも使わず、資料は全てシステム部門に頼む体質
宴会や支店向けの広報をワードで一生懸命作る会社だったらしい
いいか悪いかはともかく、まぁ、日本の上層部は社会主義だ。 >>417
自分もセル結合嫌派だけど、これまでセル結合で表現していた部分はどうするの?
個人的には、(選択範囲で中央)が水平方向だけでなく、垂直方向にもきけば満足だけど、、
現場の意向でどうしても使わないといけないことが多々ある。 >>420
・セル結合は機能自体なくす
・「選択範囲で中央揃え」的なものをもっと増やす
要するにとにかくセルと情報は1:1にする
その上で
・書式設定無し
機能があれば、
編集側、閲覧側に取っても幸せになるだろう
とにかく、作業中のデータとプリントアウト等の見せるデータ、これを抜本的に乖離しないと話にならない
とにかくセル結合が最初だ。 >>421
見せるためのデータをまた入力にするなんてバカなことをしなければ別にいいだろ
セル結合したって >>422
>見せるためのデータをまた入力にするなんてバカなこと
中小企業では普通にある。
もうええ、これに関しては突っ込むな時間の無駄だ >>391
>>390
諦めてCopy Destinationします。
ありがとうございました。 画面に表示されてるとおり印刷してくれ
俺の要望はそれだけだ _人人人人人人人人_
> 突然の亀レス <
 ̄Y^Y^Y^Y^Y^Y^Y ̄ 突然セパレータの話を持ち出しておいて「だって」とはwww >>433
mac版で:じゃなくて\で動くの?w
ソースは?w >>431
>>433
ワッチョイの仕様変わったの?
ID:lGWBXgBz0この人UA部分がころころ変わってるんだけど
デフォルトの名無しさん (ワッチョイ ef8e-9J/J)
デフォルトの名無しさん (ワッチョイ ef8e-kjbA)
デフォルトの名無しさん (ワッチョイ ef8e-c3sC)
デフォルトの名無しさん (ワッチョイ ef8e-h4wC) >>410
RangeをSelectする必要なんて普通無いだろう。
Selectする場合はSheetをActiveにするのも自然だろ。
何かおかしなこと言ってない? >>436
select しないといろんな操作ができないって思ってるのかも
マクロの自動記録で覚えた奴にありがち >>436
あんまり無いだろうね。これは俺の好み
Workbook_BeforeSaveで全sheetのcells(1,1)か、最終行に選択セルを持って行くことがよくあるんだ わざわざシートのActivate/Selectメソッド使わなくても、シート.Range(Index).Selectで終わる話だろ
そんなにGlobal.Range使いたいんか?
Global.Rangeなんてほぼ使わないぞ俺は、コードの可読性下がるから シートがアクティブになってないとセルのselectできない話でしょ >>434
修正したけど出来ないってレスしてんじゃん
ちゃんと読んでからレスしなよwww >>443
>>410は「シートをselectするかactivateしないと、rangeがselectできない」って書いてるよな
シートがアクティブになってないとRange.Selectが使えないっていう話をしてるわけじゃなくて、
シート.Selectメソッドかシート.Activateメソッドを使ってシートをActiveにしないとRange.Selectが使えないっていう嘘を言ってるんだぞ >>445
念のために聞いておくが、何が嘘で、正解は何なのか教えてくれないか どっちにしろSelectするかActivateすれば使えるんだろ?
たいした問題じゃねえよそんなの 文法的に納得いかないけど上手くいく不思議
Set Newbook = Worksheets.Add >>451
代入してんのか?実行してんのか?っていう。 >>452
戻り値を代入してる。特に違和感がないんだが むしろ NewBook と言う変数名の方に違和感があるんだが... 個人的にはworksheet.copyが値返してくれないほうが納得行かない >>456
その気持ちはよくわかる
その行を実行した直後はどの変数にも入っていないシートだからなんか不安になる
どうしても不安なときは先に新規ブック作っといてそこをコピー先にしてるけどね
それはそれで無駄なことしてんなあという気になる >>448
機能とは関係ない話だけど変数名はNewBookじゃなくてNewSheetにした方がニュアンス的に正しくない? >>456
機能的に代替出来る操作がある場合は値返さないものが多い気がする。
たぶんユーザー操作をマクロ化する為だけのメソッドは返さないんだと思う。 >>444
おい間抜け、↓この事だろ?こいつは嘘だ
>>399
>アドバイスいただいたものも全てダメしたけどダメ。
コード書いたり詳細に説明したレスに対してですら
個別にレスを返さない奴は、大体が釣り・試してない・見逃しのパターン
ソース?根拠?理由はこれだ、結果が書かれていない
>>387
余談だけど、foo野郎との質問野郎はなぜかセットで来る >>460
義務じゃないんだから、嫌ならもう来なくていよ >>461
またそうやって話逸らして逃げるんだから ある数値に対して指数表記の有理数と指数を楽に拾いたいときって、format関数を使うのがいいですかね?
他に楽な方法ありますか? どんな方法があるにせよ、お前はそれで納得できずもっと他にないの?って
聞き続けるんだろ? >>463 書いてたら泥沼化してたんだけど、結構すっきり書けました。
指数=cint(split(format(数値,"0e+0"),"e")(1))
有理数=数値*0.1^指数 エクセルの複数のセルの外枠に罫線を引きたいのですが、アプリケーション定義なんたらのエラーが出ます。
workbooks(********.***).worksheets(*****).range(cells(StartRow,StartCol),cells(endrow,endocol).borderaround
でstartrow startcol endrow endcolは変数です
どこがおかしいでしょうか? >>466
cellsがActiveSheetのセルなのでエラーになる。
↓のような感じでどうぞ。
with workbooks(********.***).worksheets(*****)
.range(.cells(StartRow,StartCol), .cells(endrow,endocol).borderaround
end with >>467 ありがとう。 そういうことだったんですね。 クラスモジュールってクラス定義してインスタンス化できるってこと?マルチスレッド可能なの?
オブジェクト指向? >>470
>クラス定義してインスタンス化できるってこと?
そう
>マルチスレッド可能なの?
無理 >>470
オブジェクト指向は中途半端なとこまでしかできない
マルチスレッドは無理 エクセルvbaの場合エクセル自体がメインのオブジェクトだから、そんなにclassにこだわることもないけどね
エクセルvbaでゲーム作ってる人は知らん >>471
>>472
プロパティくらいなのか
サンキュ >>474
カスタムイベント実装、インターフェース継承くらいなら出来る
ただ引数付きコンストラクタの作成やクラス継承・オーバーロードが出来ない >>475
C++でそれらを使ってた時は
無くてもいいかなあとか思ってたけど
VBA始めたらありがたさがわかった >>477
C++でわからなかったんだからわかってないよそれw >>478
いや、普通に使ってるものに対して
いちいちありがたみなんて感じないだろ?
あるのが当然なんだから
正直lamdaもほしい >>479
そうか?オレ毎日納豆食うけど食うたびに美味しいぜ? C++の共用体はこんなもん使うか?と思ったけど、使うべき場面が来たら普通に使う
そういうもんだった ありとあらゆる機能を使って実装するっていう状況自体少ないだろうしな。 マルチスレッドが無理って、
2つのブックでDoEventsして、
2つ実行したらおかしくなるってこと? なんやかんやクラスは便利
データまとめるのにはよく使うわ >>486
クラスでデータまとめるって、具体的にはどういう場面で使ってる?
ワークシート使うより便利? >>487
シートにあるやつを一回配列かコレクションか(俺はやらないけどレコードセットでもいい)にクラスん中でまとめるのよ
メインコードにリストに入れる処理入れるとごちゃごちゃするからさ >>488
レスありがとう
なるほどね
複数のレコードに対して同じ処理を繰り返す必要がある場合には便利そう >>484
全然ちがう。
win32API使って別スレッド作る方法はあるし可能だよ。
けどExcelVBAでそれをやると物凄い不安定になる。
自分が試した感触ではRangeとかCellとかのExcelのオブジェクト触った瞬間にExcelごと落ちる感じ。
じゃあ、Excelのオブジェクト触らずに計算する所だけなら良いかというと、動く場合もあるけど複雑なものになると処理が間に合わなくて落ちるらしい。
基本、やめた方が良い。 別処理をWord使って処理させようとしてもOffice全体で連携かかってるみたいでうまくいかなかったことがある
変なとこで作り込まれていてやりたいようにできないんだよな 元々マルチスレッドに対応してないものを無理矢理動かそうとして文句言われてもなぁ... 想定外の使い方ができないぞ!ってのは文句じゃないのか >>490
ほほ同じ経験がある。
自分の場合は処理が終了したデータをDBにINSERTするところは上手くマルチスレッド化できた。
待ち合わせが必要ないパターンだったし。
COMそのものがマルチスレッドだめなんかね? >>496
プライマリスレッドからでもダメなこと多かったよ。 >>497
> プライマリスレッドからでもダメなこと多かったよ。
どの言語で? >>495
> COMそのものがマルチスレッドだめなんかね?
COM 自体はアパートメントモデルをちゃんと設定すればマルチスレッドでも動く
http://eternalwindows.jp/com/apartment/apartment01.html
個々のオブジェクトが正しく動作するかどうかはまた別の話 マクロを作成は通常MODULEですが、
Sheet1やThisworkbookに記入するのはどういうときでしょうか。済みません。 >>501
要望として有るのは待ち状態の時に先に進めるためとか。
ダイアログの中には何らかの操作をしてダイアログ自体を閉じさせないと次のステップに行かない物がある。
そういう時に別スレッドで無限ループ中でそのダイアログが見つかったら操作する処理を動かしてからダイアログ表示させるとか。
例えばメッセージボックス表示させるんだけど10秒間ボタンが押されなかったらキャンセルするとか。
こういうのは上手く書くと動く。
他にも複数の関連しない計算に時間がかかっている時に単純に速度アップのために使いたいと思うかもしれない。
でも動いても趣味のプログラム以外じゃ危なっかしくて使えない。
マルチプロセスで代替えできるものも多いから無理する必要もない。 >>500
>Sheet1
そのシートをActiveにした時の処理、DeActivateにする時の処理、あるいは
特定のセルにデータを入れた時の処理 etc
>Thisworkbook
ブックの起動時や終了時にDBとの接続処理や切断処理を入れてる sheetやbookに書くのはそのオブジェクトのイベント
使い捨ての整形マクロなんかはsheetに書いてもいいけど、標準モジュールに書いたほうベター >>500
シートやブックのイベントを使用するためだよ vlookup等を使用しているとソルバーが使えないらしいのでVBAで作ろうと思っていますが、定番というか定石というか、参考になるサイトややり方等はありますか?
言ってて抽象的だなとは思ってはいますが、どうすべきなのか判らず…よろしくお願いします。 >>500
Thisworkbook.Worksheets(Activesheet.Name).Cells(1,1).Value=1
って書くのが面倒くさくて、
Me.Cells(1,1).Value=1
って書きたい時とか。
Me.も要らねえだろって?
何らかの理由でActivesheetが変わっちゃったら嫌じゃないですか? 教えてください。
マクロでハイパーリンクを実行したいのですが、セルにリンクを貼る必要がない、ただマクロから実行するだけというとき、どう書けば良いのでしょうか。 >>508
これ?
Sub foo()
ThisWorkbook.FollowHyperlink "http://www.google.co.jp/"
End Sub そっち?
ハイパーリンクじゃなきゃダメなのか、
飛べば何でもいいのか。
Dim Ie As InternetExplorer
Set Ie = CreateObject("InternetExplorer.Application")
Ie.Visible = True
Ie.Navigate "http://www.google.co.jp/" ↑Microsoft Internet Controlsを参照設定しないとだめだわ。 >>510
IEではなく、chromeインスタンスを作ることって出来ますか? Dim objShell as Object
Set objShell = CreateObject(“WScript.Shell”)
GC.Run (“chrome.exe -url ” & アクセスしたいページのアドレス) 間違えたので
Dim objShell as Object
Set objShell = CreateObject(“WScript.Shell”)
objShell.Run (“chrome.exe -url ” & アクセスしたいページのアドレス) >>507
activesheetがどこだろうとsheetモジュールに書いてんなら関係なかんべ
sheetオブジェクトまで省略できる手抜きコードで済ますのにたまに使ってるわ
あとsheetをコンフィグ書いとくのに使ってるときにプロパティ的な関数を置いといたりな
あまり行儀よくはない自覚はある >>506
詳しくはないけど、VBAでやるものじゃない印象。
Excelのソルバーで収束するように数式を書き換えるか、他の言語やツールを使うのがいいんじゃないかなあ。
「ソルバー アルゴリズム」でググれば色々手段が出てくるよ。 あるサイトのスクロールバーを一番下まで下げて
キャプチャしてシートに貼り付けてトリミング。
同じページにあるフレーム内のスクロールバーを下まで下げて
キャプチャしてシートに貼り付けてトリミング。ってのを
3ページ分位繰り返し行いたいのですが
http://www.vba-ie.net/ie/iescroll.html
この辺とか見てるんですがヒントください >>517
なんでこんなヘンテコなことしなきゃならんの?
JavaScriptなんて必要無いぞ。
と思ったけど、ちょっと調べてみるとJavaScriptでスクロールしてる例が多いな。
今、試す環境が無いから何とも言えないな。
DOMの勉強するよろし。 >>517
パット見たけどかなりめんどくさそう
キーボードマクロの方が良いと思う >>519
キーボードマクロは危険だよ。
動いてる最中にマウスクリックとかすると場合により大変なことになる。
操作は難しくないけどキャプチャをどうするかで難しくなるかも。
自分だったら難しい方法を選択するので。 VBA初心者です
For Nextループのカウンタ変数について質問です
1) データの最終行を取得
カウンタ変数の初期値 2、終了値をデータの最終行に設定(仮に11とします)
2) For Nextループで処理
3) ループ終了後、A11セルの値を変数に代入したい
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
処理
Next
★変数 = Cells(i, 1).Value
★For Nextループを抜けた直後のカウンタ変数iは、データの最終行(i=11)のはずなので、
そのままCellsプロパティに代入すればA11セルの値を取得できると考えたのですが、
ループ終了時にカウンタ変数iが終了値に+1されて12になってしまいます
「For Nextループ終了後のカウンタ変数iは終了値+1になる」
というのは仕様なのでしょうか? ループ変数が指定の範囲を「越えたら」ループを終了する、というのがForの仕様 ループ変数が指定の範囲の「間」ループを繰替えす、というのがForの仕様 >>522
仕様だよ
For Nextはカウンタ変数の値が引数endを超過した(または引数endの値未満になった)と判断したときにループ終了になる
Step1でループさせた場合、カウンタ変数がend+1の値になったときに次の処理に移るので、ループを抜けた後のカウンタ変数は当然end+1になる お答えありがとうございます
>>523,525-526さんがおっしゃってるようなことかなー、と思ったのですが
カウンタ変数は終了値を維持するという謎の思い込みがあったので
詳しい方々にきちんと教えていただけて有り難いです
>>524
ごり押しでi=i-1とするつもりでしたが断然スマートですね
というか、最終行取得のCells(Rows.Count, 1).End(xlUp).Rowも定型文のように覚えていたので、
きちんと構文の意味と動作を調べ直します i = 1
Do While i <= 11
i = i + 1
Loop
みたいなもんだね。
あと言語によってはループ変数(i)がfor文の中だけのスコープで
for文を抜けたら破棄されたりするから、ループ変数はループの中だけで
使う癖をつけておいた方が無難。 別ブックのデータを自動で取り込むプログラムを書いていて思うんだけど、
そういうのが簡単に出来るクラスとかないの? >>517
こんな感じかな?
出来るかはわかんないけど。
IEインスタンスを生成する
IEを表示する
IEにURLを送る
IEの表示を待つ
IEのページにフォーカスする
sendkeysで一番下までスクロールする
sendkeysでPrintScreen
0.1秒位待つ
シートに貼り付けてトリミングする
IEのiframeにフォーカスする
sendkeysで一番下までスクロールする
sendkeysでPrintScreen
0.1秒位待つ
シートに貼り付けてトリミングする
以下ループ
キーマクロは俺も考えたけど、エクセルの操作が融通ききにくそう。
UWSCとか使えばいいかもしれないけど、結局VBAで書くのと大差なくなる気がする。 >>531
そうだけどさ、
自身のファイルを開いてないか?
開いたファイルにフィルタがかかってないか?
開こうとしているファイルは既に開いてないか?
xlsかcsvか?
って、色々チェックするの面倒じゃん。 >>533
Function foo1(FilePath As String) As Workbook
For Each x In Workbooks
If x.FullName = FilePath Then Set foo1 = x: Exit For
Next
If foo1 Is Nothing Then Set foo1 = Workbooks.Open(FilePath)
End Function
Function foo2(WS As Workbook, SheetName As String) As Worksheet
For Each x In WS.Worksheets
If x.Name Like SheetName Then Set foo2 = x: Exit For
Next
If Not foo2 Is Nothing Then foo2.AutoFilterMode = False
End Function
こんなんだろ。大した手間でもないと思うんだけど。
俺はモジュール一個にワークブック、ワークシート、セルの各種チェック含めた操作関係まとめてたけど、
二十個くらいにしかならなかったぞ。 >>535
まあそんなもんなら大した手間じゃないよな
それじゃ全然ダメだけど禿 Function foo1(FilePath As String) As Workbook
on error resume next
この魔法の一行で全て解決 On Errorだと原因が分からないからなぁ。
単純なマクロならそれでもいいんだけど。 >>535
> If x.FullName = FilePath Then Set foo1 = x: Exit For
これ通るのか…知らなかった… application.runをaccessから呼んだんだけど、
activateしないと失敗してしまう。
あと、マクロを保持してるブックを開いてマクロを実行すると処理中はブックを触れないが、accessから呼ぶと触れてしまう。
おかげで処理に失敗するので、何とかならないだろうか。 >>539
コロンが改行の代わりになるから、コロンで区切りさえすればだいたいのものは通るぞ。
>>540
ExcelからAccessを触るようにしよう。
AccessからExcel触るのは管理がくっそ面倒だから(バージョンによるかもしれないが)
修飾付きのエクセルファイル出力がしたいとかでない限りやめた方がいい。
あとはExcelで直接DBを開いてSQLで制御するという地獄の選択肢もあるぞ。 >>532
キーマクロもSendkeysもやめた方が良い。
Sendkeys等は宛先を指定しない。
VBA動作中でもアクティブウィンドウは操作で変更出来る。
IEのスクロールはページ表示後もDOMで出来る。
'1ページ高さ
lngPH=objIE.Document.DocumentElement.ClientHeight
'サイト高さ
lngBH=objIE.Document.Body.ScrollHeight
'1ページスクロール
objIE.DocumentParentWindow.ScrollTo 0, lngPH excelで直接DBに接続してSQLの何が地獄なんだろう… >>545
説明できるほうに100億ドル
ただしジンバブエの >>545
Accessと文法が違う
使えない命令がある
エラーが返ってこない
データ型の指定が出来ない
過去スレとかで何度も出たけど、だいたいこの辺の理由で地獄 >>546
ジンバブエドルってもう回収済みだから割と価値高いよな 今の1ジンバブエドル=0.3円らしいから、100億ジンバブエドル=30億円かな >>541
access起点で作ってるらもう駄目だー。 素人にVBAを教えるとき
いきなりRange()とするんじゃなく
Workbooks("うんたら")〜.RangeやCells
と、ちゃんと上位層の指定を書くんよ!
って最初から教えるべき?
それとも慣れてから教えるべき? >>551
>>466 のようなエラーがあるから
Cells Rangeの前には必ず上位層を指定する癖を 付けさせた方がいいと俺は思う
手を抜いて省略するのは慣れてからでもいいんじゃね? >>552
普通に、「シートモジュールから自分のシートを参照するときは不要、それ以外は必要」と教えれば? >>551
べったり張り付いてられるなら失敗してから教える方がいい。
PC教室みたいに一過性の教育なら省略しない書き方で覚えさせた方がいい。 >>553
アンカミスなのか 俺宛てなのか分らが・・・
シートモジュールの場合 省略していいよじゃなくて 自分自身を示すMeを使って
Me.Range(・・・・) と教えた方が良いと思うんだけど >>533
fso使って自分で作りゃいいじゃん
難しくないでしょ >>551
同時に教える
動かして動かせたらなんでか、というふうに >>555
> Cells Rangeの前には必ず上位層を指定する癖を 付けさせた方がいいと俺は思う
に対する俺の意見なんで、アンカーは間違ってないよ。
> Me.Range(・・・・) と教えた方が良いと思うんだけど
これにも反対。
MSが言うように、実引数のときのみ使う方がわかりやすい。
https://msdn.microsoft.com/ja-jp/library/office/gg251792(v=office.15).aspx
そうしないとMeだらけになる。 >>558
あい分った
きみの主張を否定するつもりはないよ
でも俺の主張は >>552 で変えるつもりはない
これにて終了 Range(Cells,Cells)の教え方が本題じゃないし、
かといってエラーの網羅なんか現実的じゃないしで、
本題に沿わない意見ってだけだからな。
そもそも同じ話してないから否定も何も話し合いにならないぞ。 >>559
まぁ、俺は全力で君の意見を否定するけどね。 >>551
慣れてからは省略することが無くなった。そんなしょーもないとこで手を抜くとミスする確率が跳ね上がる
その分setは多用するけどね
set 集計シート = sheets("total")
集計シート.cells(1,1) >>563
sheetsは省略しとるけどええんかこれで? Set 集計シート = Sheets("Total")
集計シート.Cells(1, 1) >>564
自分の信じた道を進めばいい
もし君の不注意が多いなら、いつか俺と同じ表記になる
sheetを書こうが書くまいが絶対にミスしないなら、sheetはずっと書かないのだろう
それはそれでいいことだと思う >>566
あいやーw伝わらんかなw
(デフォルトのワークブック.)sheets()
という表記になってるけどそれはええんか?
という意味やでw >>567
/(^o^)\
単独ブックならbook名は省略するかな
単独シートでマクロを使う場合は省略はしない。拡張した時に大抵必要になるし、そのパターンが多い
で、複数のブックを使う場合は必ずsetする
set 設定シート = thisworkbook.sheets("設定シート")
set 転記元ブック = workbooks.open("転記元ブック")
set 転記元シート = workbooks.open("転記元ブック").sheets("転記元シート")
set 転記先シート = workbooks.open("転記先ブック").sheets("転記先シート")
大体こんな感じでsetしてから使うかな
俺の癖で、設定はマクロファイルに入れるので、thisworkbookだけはそのまま使う事が多い worksheetsをsheetsと略してるのはどうなの?ってことだろ >>569
グラフシートやマクロ4..0シートを使うなら問題かもしれないね
俺は使わないからどうでもいいけど 面白いな。
そんな書き方あったのかよっていう例が色々。
でも、Openしたブックを直接セットしちゃったら、
ReadOnlyとかできるの? 必ずBookも省略しない。
慣れだね。
気分でSetもWithも使わずに物凄い長い文を書くこともある。
ー度動かしてから修正するけどね。 単独ブックで使うときだってブックは省略しない方がいいに決まってるだろ
ユーザーがどんな使い方するかなんてこっちで管理できないんだから
そもそも大した手間じゃねえし やはり、最後にはちゃんと指定を教えることにはなりますよね。
とりあえず、プログラミングが簡単って感じで入れればいいかなと思って
最初から細かく行くと嫌になってしまわないか?というところで悩むところ、、、
でも、全部上位から書くって別に複雑では無いんよね、、、 RangeとかCellsとか使うコードを書かせることは、コード量が少なくなるから一見エクセルマクロやプログラミングの初学者向きに見えるが、後々オブジェクトモデル理解の妨げになる >>577
は?
自称上級者様はExcelVBAなのにシート使わないの? コード量のために
withやsetを教えるとまた最初に覚えないといけないことが増えるし。
インデントも教えないといけなくて、、、
悩む、、 >>579
With はともかく Set はおまじないレベルでもいいので教えておくべきだ思う >>578
基底クラスのRange、Cellsは使わない、という意味だよ
RangeクラスやCellsクラスを使う場合は必ず操作対象のブック、シートを指定する 住所と一緒。
いきなり中央区と言われても「どこの?」となる。
ブックから指定した方が曖昧さが無くなる。 >>581
お前は基底クラスの意味をもう一度調べてこい
知ったかかと思ったらそれ以下だったわ w でもなあ…このスレで上から目線で偉そうに語ってるやつは例外なく>>581レベルなんやで…かなりマジに… >>584
既定クラス?
なにそれ初耳なんだが... >>588
そんなアホな返しは要らんからあると言うなら定義してあるところ教えて >>589
既定のクラスのことだろ
既定のプログラム→既定プログラム
既定の値→既定値
日本語が解るなら既定とクラスから類推出来る >>590
ひょっとしてクラスとオブジェクト/インスタンスの区別もついてないのか? その既定のクラスとやらは、いつどんな状況で使われてるの?
まあ>>581に対してなら、基底クラスより規定クラスの方がまだ納得できる文書になるけどな >>593
既定のクラスを想定できる状況で使うんじゃね? なぜオブジェクトを代入するとき、setをつけないといけないんでしょうか?
他の言語ではそんなことないのに >>592
赤のペン→赤ペン
青の信号→青信号
自動車の教習所→自動車教習所
机の上→机上
抽象化する知能があれば解るよな >>596
VBAではそういうルールになってるから。嫌なら使わなければOK それでうまく誤魔化したつもりなのか・・・
嘘に嘘を重ねて、引っ込みがつかない状態で強がられても・・・ >>597
それ抽象化じゃなくて単なる省略だろ w >>596
Dim str1 As String
str1=Range("A1")
Debug.Print str1
は分かるよね。
Dim var1 As Varient
var1=Range("A1")
Debug.Print var1
も分かるでしょ。
じゃ、
Dim var2 As Varient
var2=Range("A1")
Debug.Print var2.Left
というのは有り得るかという話。
Setが無いと誤解が増えるよ。 Setが必要な理由は、デフォルトプロパティへのアクセスなのかオブジェクト(参照)へのアクセスなのか区別できないから
ちなみに、VB6ではSetは必要だったが、VB.NETではSetは無くなった
その代わりに、デフォルトプロパティが廃止された >>595
俺にはVBAで既定のクラスと言う物を想定できる場面がないからきいてるんだがな >>581
は規定のクラスという謎の単語を使っていたのか?
それとも基底クラスを何かと間違えているのか?
10秒考えたけど分からなかった Setなあ...
IsObject 判定が必要になる状況ではいつもウザいと感じる VBAしか知らない俺なんかからしたらSetなんか当たり前じゃんとしか思わん。
ところで、「既定のクラス」って何? >>607
まだいたのか w
抽象化の意味を調べてから出直してこいよ >>609
setは他の言語触ってるとめっちゃめんどくさい。
ついでに言うと比較が「=」なのも糞すぎる。代入か比較かわからん >>613
そういうのは単純にVBAについての習熟度が低いから混乱するってだけで慣れの問題だし、
なんならC言語処理系の代入演算子が代入した値を返すっていう動作の方が、
仕組み上は原始的で、シンタックス上は冗長的とも言えるしなぁ。 >>615←ほらまた新たな>>581が現われた、なんやねんこのスレ 「規定クラス」とかいかにも公式に定義されてるっぽい言葉を使いながら
抽象化だよわかるだろ、とか
省略だよわかるだろ、とか
>>614
いろいろすまんw ところで、規定クラスの説明まだかよ!とっとと書けよ >>619
勘違いしてるのはお前だろ
書き間違いや勘違いでないと思ってるのならちゃんと説明してとっとと終わらせろ そもそも大本の>>577が別におかしな事言ってないのに、
何故か勝手に混乱してる気がするんだけど。
「基底クラス(CellsやRangeに対するWorksheets等)」を省略すると、
あたかもRangeやCellsが何にも属さず単体で存在している様に見えてしまうので、
教育上良くないと言っているだけだろ? 基底クラスのことではないのか…
まあだとしたら意味が違うけど
でもさ、規定って英語で言うとデフォルトだろ
何かちがうかんじが CellsやRangeに対するWorksheets等のことを「基底クラス」と呼ぶなんて、
いくら何でもオレオレ過ぎる
自ら混乱を呼んどいて勝手に混乱するなよ、とか >>621
WorksheetsがRangeの基底クラスはあり得んわけですよ
まだそれを既定クラスって用語だと勝手に定義してる方がマシ おれのほうが詳しい()
でスレ埋めるのやめろマヌケ共 >>624
ああ、そうか。
継承しているわけではなくてメンバーだから基底クラスではなく親クラスか。
俺も(たぶん)>>577と同じ勘違いしてたわ。
しかしなんでそんな喧嘩腰なんだ。何を主張したいのか推測して訂正すれば荒れずに済んだんじゃないか?
言葉を間違えているだけで主張がおかしいわけではないんだし。 基底クラスに突っ込んでるやつはそんなにいないだろ
きっぱり間違ってるし
そのおおもとの意見そのものにも反対してるやつも見受けられない
それより既定クラスとかいう謎用語を出してつっこまれて
>抽象化する知能があれば解るよな
とかいう、本気でアホなのか誤魔化したかったのか分からんような返しをするから揉めてるんだよ >>627
それこそなんで混乱するのか分からないんだが。
「既に定められたクラス」だろ? 正式な用語じゃないけど漢字見りゃだいたい何を指しているかは分かるだろ。
複数考えられるならどれなのかを聞けばいいだけだし。 だからVBAでの実例出してみろって言われてるだろ
それで納得すれば終わりの話なのに 既定のクラス、だとしてもよくわからんな
まあともかく省略はさせるべきではないよ
まあオブジェクトについてしっかり説明できないといかんから難しいけどな
俺はよくわからん 既存クラスって言いたかったんじゃね?
既定クラスは日本語としても意味がわからんな
どーでもいい話題だが おれのほうが詳しい()
でスレ埋めるのやめろマヌケ共 >>629
俺は既定のプログラムとか、既定値とかって例からして、
MS側が作って公式に提供しているクラスを既定クラスと言っているもんだと思ったけど。
それだと大本の話と繋がらないから、
あるいはActiveSheetのターゲットがCellsを単体で実行する前に決まるから、
Cellsから見てActiveSheetが「既に定められて」省略された親クラスであるから既定クラスと言っているか。
いずれにしても何も考えずに「なにそれ」って言うよりも先に、自分から進んで例を出せば角も立たなかったと思うよ。 どーでもいいかねえ
無知の教えたがりってのは言わば無能な働き者と等価なんだよなあ
存在自体が害悪でしかないわ まだやってたのか?
規定クラスなんて釣りに決まってるだろう
無駄な時間を過ごしてご苦労さん >>635
考えた上で答えがわからないんじゃなかったのかよw >>604
Dim a As ***
a = 他のオブジェクト
と書いたとき、*** がオブジェクト型もしくはVariant ならオブジェクトへの参照
そうでなければデフォルトプロパティへのアクセス
で十分区別できると思うけど? >>639
デフォルトプロパティは代入先(左辺)でも使えるんだぜ
aのデフォルトプロパティへの代入かaへの参照の代入か区別できんだろ ヒカル TV出演「年間5億は稼ぐ勢いですね」
https://www.youtube.com/watch?v=G7qL6ftpets
第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ!
https://www.youtube.com/watch?v=asF2wQ2xhjY&t=61s
ユーチューバーの儲けのカラクリを徹底検証!
https://www.youtube.com/watch?v=FUSb4erJSXE&t=504s
【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開!
https://www.youtube.com/watch?v=Y7DAQ0RKilM&t=326s
誰も言わないなら俺がYouTuberのギャラ相場を教えます
https://www.youtube.com/watch?v=E4q-vaQh2EQ&t=118s
YouTuberになりたいのは馬鹿じゃない!YouTuberになる方法
https://www.youtube.com/watch?v=Fr0WXXZRMSQ
最高月収5000万円だとさ。年収じゃなくて「月収」な
おまえらもyoutubeに動画投稿したほうがいい
やろうと思えばスマホがあればできるぞ
最低2年はやらないとここまではいかないだろうけど才能とアイデアと
企画力と継続力があればが大儲けできる可能性がなくもない
まだまだ他の職種に比べれば競争率は低いからオススメ
顔出したくないならラファエルみたいに仮面つければいい >>640
うーんそうか。
だが敢えて言わせてもらうがそういうコードはクソだ とは言ったもののどうしようもねえのか
誰だデフォルトプロパティなんて作った奴は >>639
出来ない。
せっかく>>603の例を挙げたのに。
真ん中の例を見てね。
この場合はSet付いてないからデフォルトプロパティ。
そして最後の例はSetを付ければあり得る。
その場合当然オブジェクト。 >>645
>>603の真ん中の例だって?
> Dim var1 As Varient
> var1=Range("A1")
> Debug.Print var1
Printは代入文じゃないからここでの議論には関係ない。ここはデフォルトプロパティ(Value)でいい。
意味論的になにも破綻しないと思う。 >>645
>>603 程度なら
> Dim var1 As Varient
> var1=Range("A1")
の時点では var1 はセルA1への参照の代入として
> Debug.Print var1
の時点でディフォルトプロパティを取得して表示すればいいだけ
できないのは >>640 の方 その手の仕様に関しての「こっちの方がいい」は何を言おうが変わりようがないので意味ないけどな。 >>646
ハァ...
疲れるわ。
だから>>639の言うように***がVarientなのにオブジェクトへの参照じゃない。
そしてSetが無くて良いなら最後の例も認めなければならない。
そうすると>>639の言うような区別がつかないことになる。 >>648
実際に真ん中の例は動作している。
Set無しで。
その時点でデフォルトプロパティが代入されていることになる。 >>650
疲れると言われてもねぇ
君はなにか根本的なところで勘違いしてない? >>650
君は>>639の主張を理解していないんじゃない? キミらはvbaの仕様策定委員にでもなったつもりなのかね?
既に過去のものになりつつあるマクロ言語の >>655
その点は>>649の言う通りだけどそういう議論(遊び)だからいいんだよw >>656
いつから議論をしていると勘違いしていた? >>653
よく分からんな。
>>639は>>603の真ん中の例形になっていると思うんだが違うのかい? >>651
「今のVBA」の話と「Set を無くしたVBA」の話の区別もつかないなら話に入ってくるなよ >>659
だからSetを無くしたVBAでは今は動作してない最後の例も認めることになるだろ。
真ん中の例はデフォルトプロパティ、最後の例はオブジェクトだ。
区別つかないんじゃね?って話なんだが。 それともSetを無くしたVBAでは真ん中の例も今動いてる状態と違ってオブジェクトへの参照を代入する仕様になる? >>658
>>603の真ん中
=代入文は参照、Printの引数は文字列なのでデフォルトプロパティ
>>603の下
=代入文は参照、Print文はプロパティを明示しているから曖昧さはない >>660
代入時点で区別する必要はなくて Print 時点で判断すればいいだけって話
>>648 を理解できてないなら絡んでくるなよ >>662
ということは、今動いてる状態とは違う仕様になるということだな。
そうすると、
Dim var1 As Variant
var1=Range("A1")+1
はエラーとなる? >>663
それは間違い。
代入時点で決まらなければ区別がついていないことと同じ。
次の文まで不定なら言語仕様が滅茶苦茶になる。 Dim var1 As Variant
var1=Range("A1")+1
では先にRange("A1")+1が評価されるからその時点でデフォルトプロパティに+1された値がvar1に代入されてうだな。
う〜ん。 >>667
そりゃそうだろ。
式の両辺の型によって挙動が決まるんだから。 他のオフィススイートについてるスクリプトには、デフォルトプロパティってあるの? >>666
お前の能力だと滅茶苦茶になるだけだろ w
滅茶苦茶になる例のひとつでも書いてみろよ そもそもなんでデフォルトプロパティなんて面白い物を作ったんだ
入門の敷居をできるだけ下げるために、.value・.valeu2・text、などを考えなくていいようにしたんだろうか >>670
デバックでステップ実行してみろ。
1行1行解釈実行されるのが基本。
後の文により前の文の解釈が変わる言語なんて滅茶苦茶だぞ。
構文エラーはプログラム全体を評価するまで決まらないことになる。 >>668
君の仕様では式の両辺の型で挙動が決まらない。
var1=Range("A1")ではオブジェクト
var1=Range("A1")+1ではデフォルトプロパティとなるけど、今んとこ辻褄は合っているようにも見えるから、う〜んと考えている。 Range("A1") = Range("A1") >>672
> 後の文により前の文の解釈が変わる言語なんて滅茶苦茶だぞ。
バカなの?
理解力ないのに無理すんなよ w
> var1=Range("A1")
の解釈変わってないぞ >>675
日本語が変なんじゃね?
>代入時点で区別する必要はなくて Print 時点で判断すればいいだけって話
代入時点で区別する必要ないということはどういうこと?
代入時点で確定してるなら区別もできてる筈だし。 >>675
君の説明では
var1=Range("A1")
の段階では型が決まるのか、それとも決まらないのかどっち? >>674
変数への代入の話題なのでそれは関係ないよ。
その左辺 Range("A1") は変数ではない。 >>678
変数じゃなければ何だろう?
アプリケーション側で用意されているとは言え、変数ではなかろうか >>674
俺の理解ではそれは左辺の側がデフォルトプロパティかオブジェクトかという話になるから>>640と同じことになると思う。
だからその点では、つまり>>640以外で辻褄が合っていないという例にはならないと思う。 >>676-677
代入時点で Variant ならオブジェクトの参照を入れときゃいいだけだろ
>> var1=Range("A1")
> の時点では var1 はセルA1への参照の代入として
ってはっきり書いてあるんだから人の日本語にいちゃもんつける前に自分の理解力を省みろよ >>678
確かにrangeだとややこしいな、新しいclassを作ってみよう
fooClassとする
fooClassのデフォルトメンバはfoo。fooのclassは自身と同じfooClass
class fooClass{
'この書き方は適当
default public Property foo as fooClass;
}
これだとfooで何が返ってくるか不定
Dim foo as fooClass
foo = New fooClass(); そういや自作クラスでデフォルトプロパティって作れるの?
作ろうと思ったこともなかった >>683
一応作れる
ただ普通は作ろうと思わないレベルでめんどくさいし、そんなもんアテにするような設計にしないだろう >>681
つまりPrint文は関係無いんだよ。
>代入時点で区別する必要はなくて Print 時点で判断すればいいだけ
は間違い。
代入時点で区別はついてる。 >>682
まあそのケースがまずいのはわかってるがそんなクラスを作る必要がどんだけあるんだ?
って話だな >>686
> 代入時点で区別はついてる。
だから区別なんてしない
両方ともに参照を入れとくだけ
って書いてあるんだが...
どうやったらそんなアホな考え方になるのか不思議だよ
まあ引っ込みつかなくなってるんだろうな w >>687
わかってるならその反論はおかしいだろう
言語仕様としておかしくなる
デフォルトプロパティがあるなら、setはどうしても発生すると思う >>689
別にそのケースなら参照を返すようにしてディフォルトプロパティは明示する(つまりディフォルトプロパティの意味がなくなる)ようにすればいいだけ
特殊なケースで使えないからと言って全部ダメって言う話ではないでしょ >>688
引っ込みも何も、今だに何言ってるのか分からん。
とレスしようとしたけど今分かった。
>代入時点で区別する必要はなくて Print 時点で判断すればいいだけ
は
「代入時点では参照が代入され、Print時点でデフォルトプロパティが返される」といいたいのだとしたら上の文章の日本語が悪いよ。 >>691
> 「代入時点では参照が代入され、Print時点でデフォルトプロパティが返される」といいたいのだとしたら上の文章の日本語が悪いよ。
ほとんどそのまま書いてあるだろ
これはさすがに恥ずかしすぎる w
>>648
>> var1=Range("A1")
> の時点では var1 はセルA1への参照の代入として
>> Debug.Print var1
> の時点でディフォルトプロパティを取得して表示すればいいだけ fooClassとする
fooClassのデフォルトメンバはfoo。fooのclassは自身と別のhogeClass
class fooClass{
'この書き方は適当
default public Property foo as hogeClass;
}
現在の仕様なら
Dim var1 As Varient
Set var1=New fooClass()
Debug.Print Typename(var1)
'->fooClass
Dim var1 As Varient
var1=New fooClass()
Debug.Print Typename(var1)
'->hogeClass
Set無しの仕様なら
Dim var1 As Varient
var1=New fooClass()
Debug.Print Typename(var1)
->?
こういう問題? >>692
俺は>>661の段階で真ん中も参照と気付いたわけ。
その後に>>663が書かれているのは日本語が悪いと言ってる。 >>690
自身のclassがメンバに〜は普通にある。特殊ではない 話はずれるが、「エクセルvaが特殊」は事実
20年以上前から生き残っている、大衆に使われ続けているスクリプト言語なんてエクセルvbaだけ
次点でjsだろう
デフォルトプロパティだろうがなんだろうが、実装すればデファクトスタンダードになる
ある意味、王様である
好きなようにあすれば良いんじゃないかな >>694
> その後に>>663が書かれているのは日本語が悪いと言ってる。
>>663 に >>648 へのアンカー打ってあるのに何を言ってるんだよ w
恥の上塗りにしかなってないぞ >>695
自身のクラスオブジェクトを返すディフォルトプロパティを持つクラスが特殊じゃないって?
例えば何よ? >>697
アンカー打ってあっても日本語が悪いのは変わらんぞ。
>>648が>>663の文章とどう関係するのか分からん書き方になってるんだから。 >>698
特殊かどうかは言ってないね
存在すると整合性が保てなくなると言っている
それがExcelの中にあるかどうかなんて知らん >>699
そもそも >>663 の日本語もおかしくないだろ
前提をいくつかはしょってるのは話の流れで省略してもわかるはずって言う考えで書いてる
それでも横入りで絡んでくるアホがいるから念のために
> >>648 を理解できてないなら絡んでくるなよ
とまで書いてある
ここまで書いてあって理解できない奴の面倒までは見れんよ w >>700
> 特殊かどうかは言ってないね
頭大丈夫?
> 特殊ではない
ってはっきり書いてますけど? w
> 存在すると整合性が保てなくなると言っている
お前さんの考える整合性とやらがどんなもんか知らんけど >>690 でなんの問題もないけどね Set無しVBA言語作るって流れになったら面白いんだけどなぁ。 >>703
デフォルトプロパティは毎回明示するのか?
A1セルのvalueを知りたい場合は
cells(1,1).value
と書けば良いのか、なるほどな
cells(1,1)
だけならエラーを変えした方がいいな 型を意識する・させることで皆が幸せになる
...そんなふうに思っていた時期が自分にもありました >>701
>代入時点で区別する必要はなくて
ってのは>>639の"十分区別できると思うけど"の区別のことだよな。
だったら「代入時点で区別できる」とか、俺の>>603の"できない"を受けるなら「代入時点で区別できないということはない」とすべきだ。
"必要"とか何が必要?
という話になる。
>Print 時点で判断すればいい
も、何言ってるのか分かりにくい。 >>706
それ、デフォルトなの?
デフォルトって何なの?
って言いたいってこと? まあ、実際には自分はSetに違和感全く感じないし、Variantで宣言することも殆ど無いし、デフォルトプロパティの省略も殆どしないんだけどね。 >>706
> デフォルトプロパティは毎回明示するのか?
>>682 のケースだけね
実際にあるのかどうかは知らんけど w
> cells(1,1)
> だけならエラーを変えした方がいいな
そう言うオプションはあってもいいと思う >709
いやもう言語仕様を考える時って最初によっぽど不具合がなければそれでいいよねってこと
vbaは非常に変則液だけど、まぁエクセル・アクセルのためなら仕方ないんじゃないの >>708
> "必要"とか何が必要?
> という話になる。
はあ?
「区別する」必要がないって書いてあるだろ
>> Print 時点で判断すればいい
> も、何言ってるのか分かりにくい。
お前の理解力がないだけ
何度も書くけど理解できないなら >>648 見ろって書いてあるのになぜか見ずに文句だけは一人前 w >>713
いや、だから
>「区別する」必要がない
が変なんだって。
代入時点で区別はついてるのになんで必要とかの話になるの?と受けとられるだろ。
> Print 時点で判断すればいい
も、誰が何を判断するんだ?と受け取られる。 型を意識しようよ
型を意識するというのは型によって構文(式の形)を変えることじゃないよ。
式の形は同じでも型によって意味が違うとかコンパイルエラーになったりすると認識することだ。
デフォルトプロパティが適用されるべきかどうかは等式の左右の型を見れば基本わかる。
わからないような式は曖昧なんだからコンパイルエラーにすべきだ。 >>715
う〜ん。
むしろSet使ってクラスとリテラルを意識したいけどなあ。
あと、真ん中はやっぱりデフォルトプロパティの代入の方がしっくり来ると思うんだ。
だからこそ、あっさりデフォルトプロパティの代入を捨て去ると思えなかったから>>645書いたんだぜ。 >>715
application内の型を意識しなくていいための、弱い動的型付けなんだよ
この設計思想は街ぃがってないと思う >>714
> 代入時点で区別はついてる
それはお前が勝手に言ってるだけの話だろ
俺は初めから必要ないって書いてるから
> なんで必要とかの話になるの?と受けとられるだろ。
なんて受けとるアホはいないと思うぞ、お前以外は w
>> Print 時点で判断すればいい
> も、誰が何を判断するんだ?と受け取られる。
マジでオブジェクト指向の勉強しなよ...
そんなのを疑問に思うなんて相当レベル低いから >>682
はだめかなぁ
徹底的に論破してほしいんだけどなぁ しかし冷静に考えると斬新かもな。
単一の文だけ見て解釈するんじゃなく、複数の文を見て意味を解釈するプログラミング言語。 >>718
>それはお前が勝手に言ってるだけの話だろ
俺が勝手に言ってるとかの話じゃなくて、代入時点で参照であると区別がついてるのが実態だろ。
>「区別」する必要ない
>Print 時点で判断すればいい
を省略せずにきちんと書いてみなよ。 >>721
> 代入時点で参照であると区別がついてるのが実態だろ。
お前はまず「区別」の意味を調べてから出直してこい
A か B かの区別がつくと言う言い方はあるけど A と区別がつくとは言わん
> を省略せずにきちんと書いてみなよ。
>>648 で十分だろ
それで不十分と言うならほぼ同じこと書いてる >>691 も不十分と言うことだ w いつまでくっだらねーーーーーーーー話を続けるつもり?別スレでも立ててそこでやれよ >>723
お前な、自分は省略してるのに俺の省略は認めないのか?
代入時点で参照であるとデフォルトプロパティとは区別がついてるのが実態だろ。
>>691は省略しても分かるだろ。
>>663は省略されてると分からんのだよ。
というより省略しなかった時に正しい日本語になるように思えないからやってみろと言ったんだよ。 以下のエクセルファイルについてなんですが
https://kouseikyoku.mhlw.go.jp/tohoku/gyomu/gyomu/hoken_kikan/documents/zen_sitei_ika_h2905.zip
エクセルを開いたあと何もせず閉じようとすると
必ず保存するかどうかを聞かれてしまうのですが
なぜでしょうか?
また、そのまま「保存する」を選択すると
ファイルサイズが半分くらい減ってしまうのも気になります
些細なことで申し訳ありませんが
どなたか原因わかる方教えてください。 >728
凄まじい個人情報でてる気もするけど、まぁいいか
・保存するかどうかを聞かれ
2010では聞かれない
揮発性関数とか混じってるのかもな
バージョンを教えてほしい >>728
保存するかどうかなんて聞かれないな
数式もないようだ >>727
> 代入時点で参照であるとデフォルトプロパティとは区別がついてるのが実態だろ。
だからそれはお前が勝手に言ってる話
そもそも区別がつくとか言ってるが勝手につく訳じゃなくて処理系が何らかの判断をしてるんだからそんな判断は「必要ない」って書く方が適切だろ
> >>663は省略されてると分からんのだよ。
話の流れ見てたらわかるし、わからん奴のためにアンカーまで書いてるだろ
何回ループするんだよ >ファイルサイズが半分くらい減ってしまうのも気になります
減った状態が正しいファイルサイズなんじゃないの。 なんか、何時何分何秒地球が何回回った時ですかあ?と同レベルのやりとりだな >>731
やっぱり日本語の問題なんだ。
今をもってしても分かりにくい。
俺が「区別がつく」とか「区別がついてる」というのは「自動的に区別がついてしまっている」ということだ。
「区別がつく」自体に"自動的に"というニュアンスを含んでいる。
だから"勝手に"などという言葉は繋がらない。
"自動的に"というニュアンスを含んでいない場合、例えば意思をもって違いを定義する場合は「区別をつける」となるだろう。
一方、君の言う「判断する」というのは厳密に言えば「意思をもって判断する」ということだ。
「判断する」自体に"自動的ではない"というニュアンスを含んでいる。
君は処理系に対して擬人化を行っているから意思をもってではなく、自動的なニュアンスを含んでいるつもりだろうが、そうであるなら主語である"処理系"を省いてしまってはわかりにくくなるだろう。
これまでの経緯を無視した上で余計な補完をして
処理系が何らかの判断をしてるんだからそんな"俺の"判断は「必要ない」
としても日本語としておかしな文とはならないということは、「処理系が何らかの判断をしてるんだからそんな判断は必要ない」という文章はそれ単体では上記の受け取り方をされても仕方の無い文章だということだ。
今だに分からんのは>>663の判断するのは誰かって話。
処理系なら判断すれば"いい"などとはならないと思うし。
Print時点で決まっているんだから判断とかいう話にはならない筈だろ。 >>682
foo君久しぶりじゃんwww
つかお前らhgだからって不毛な争いしてんじゃねえ
よそでやれクズ共 %%%MC+7,8%%%
}
000-"M","LES","TUV=0.13325&/0\7&%&",
001-"23","1","0","2","7.14",[\b%7/1444*%812%2.3%7&6111\end\\]{%3%12%\br マクロは記録をいじるぐらいの初心者です
AとBファイル開く
Aのマクロ作動ボタンを押す
BでAで作ったマクロが動き、データが整形される
Aファイルが閉じる
というのを作れるものなら作りたいけど、可能ですか?
Bファイルは毎日新しいのが来ます
出来るとしたら検索ワードが悪いらしく、見つけられないので
なんという動作なのか教えてください >>742
Aは自分の手元にあるブックでBは他所から届くのか。
「BでAで作ったマクロが動き、」の意味がよくわからない。
なんとなく簡単ぽいけど >>743
Aは自分のパソコンに作ったもので、Bは毎日他所からきます。
Bを開いてそこからAで作ったマクロを動かすしかダメですか?
>>743
記録ではムリなので、見本となるのがあればいじれないかなと思って聞いてみました >>742
Aのブックにマクロを記述
ファイル名が固定でないなら GetOpenFilenameでファイルを選択
ごちゃごちゃなんか知らんけど開いたブックBに対して処理をする
Aを閉じる(ついでにExcelそのものも終了させる)
だろ? >>746
そうです
マクロのボタンの作り方とか調べても、同じファイル内で
動くものしか出てこないので、ボタン一押しで動かせないのかと
そういう話です 星くん vbaでググって
第2章読めば似たようなことが書いてあるよ >>742
普通はアドインにする。
Aファイルは開く必要が無い。
アドインならExcel開いたらAファイルも開いてる。
ブックは非表示だから開いてるようには見えないけどメニューにボタンを追加すればマクロは動作する。 @@@EMO@@@
}
000-"E=0.133348213376128"
001-"4","1.6","2","3","13","3","81","47","0","1","2","85",
002-"813-1>>>1%$1.3Q!@!$%81.3!$%B,61.2,"13.2"21.7[[%$EMOLA\%/7#/OBLA[%!\2.3=0!&#%<<<Q,S,L,7P,%41%-%2]]%End\]{ アドインで出来きました
すごい
星君も読みつつあったのですが、とりあえず
アドインが上手くいったのでこれで進めます
相談に乗ってくださった方々、ありがとうございました >>742
Sub foo()
Dim WB As Workbook
With Application.FileDialog(msoFileDialogFilePicker)
If .Show Then src = .SelectedItems(1)
End With
If IsEmpty(src) Then Exit Sub
Set WB = Workbooks.Open(src, 0, 1)
Process WB
If Not WB Is Nothing Then WB.Close: Set WB = Nothing
End Sub
Sub Process(WB As Workbook)
'行いたい処理
End Sub
fooをボタンに登録すれば好きなファイルを指定して開くことが出来る。
ファイルBの処理はProcess内に書く。 事務職向けマクロなんだから冗長でも何でも良いと思うけどね。オブジェクト指向バカとか
業務妨害以外の何者でもないと思うしw 上げでちょっと変わった質問する人と
foo君がセットで登場するのはたまたまだから
ほんとに偶然だから >>758
お前がfoo君と呼んでるのは一人ではない >>756
エクセルがモロにオブジェクトだから、自然とみんなオブジェクト指向バカになるんだな、これが
>>760
そこはfoonじゃないかな?かな? >>762
LISP、Haskell、Schemeは本当に使いこなせなかった
君の指摘は正しいよ 初心者です
1 処理A
2 処理B
3 処理C
:
:
こういう流れのVBAで、処理Aと処理Bそれぞれからスタートさせたいときは、どうやるのが一般的ですか。
sub A
処理 A
sub B
処理 B
end sub
end sub
これではだめですよね。 >>764
いまいち何やりたいのか分からないけど、処理 Aを飛ばしたい場合とそうでない場合があるって事なら
Sub Foo(b As Boolean)
If b Then 処理 A
処理 B
処理 C
...
End Sub 処理というのがどのレベルなのか分からない。
Sub A()
処理A
B
End Sub
'処理B(Bプロシージャ自体が処理B)
Sub B()
'処理Bの内容
End Sub
とする場合もあれば、
全部の処理をそれぞれ別のプロシージャとして作り、メインとなるプロシージャでそれぞれをよび出す場合もある。
この場合はAからよび出すメインプロシージャやBからよび出すメインプロシージャを作ることになる。 >>764
1 処理A
2 処理B
3 処理C
:
:
のパターンと
1 処理B
2 処理C
:
:
のパターンがあるってこと?
それなら >>765 みたいにするか
Sub ABC_()
処理A
Call BC_
End Sub
Sub BC_
処理B
処理C
:
:
End Sub
ってやるとか ありがとうございました
自分なりに考えたのは、どこかのセルにフラグを置いといて、
処理中に分岐させるというものでした
767さんがわかりやすいですが、>>765のやり方を勉強してみます 拡張For文とも言われる
For Each (オブジェクト変数) in (そのオブジェクトのコレクション)
の構文で、ときどきその(オブジェクト変数)の処理によってFor Each文でまわすコレクションのオブジェクトの順番や数が変わってしまい困っています。
例えば
For Each iCell in Activesheet.UsedRange
である条件のiCellのときにその直下に新しい行を追加したり
For Each iFile in TargetFolder.Files
でiFileのファイル名を変えようとした場合に(FileSystemObjectを使ってる)
発生しました。
こんなときは処理結果が意図したものと違ってぐちゃぐちゃになって困っています。
最初にFor Eachの行をマクロが通過したときに処理すべきオブジェクトは固定されないんですか? For Eachで列挙される順番は、実装依存で保障はされてないはずだけど
普通は同じコレクションに対しては同じ順で帰ってくるよ
For Eachで列挙中にそのコレクションに対して変更した場合は、その列挙はどうなるか分からん
なので要素を増減させるような処理はFor Eachの中でやっちゃ駄目 ループ処理中に処理対象を変更したら当然おかしくなると思うが… >>770-771
そんなことはアホなオレでもわかっとりますわ。
その上でそれを回避するような定番な方法や定石的手順の方法を知りたいのですが。 >>772
ループ内で対象を記録しておいて後で書き換えるとか
一時保管場所を作って蓄積してから元の場所へ戻すとか >>773
しかしそれでも記憶させておくものは参照のメモリアドレスには変わりないと思うから
対処によってこの参照先が変わってしまい同じような意図しないぐちゃぐちゃな結果になったりしませんかね?
あとわからないのがFileSystemObjectでファイル名を変えただけで対象が変わってしまうのが不思議。
これは別に要素の増減でもなんでもないのに。 >>774
しませんかね? と質問する前に自分でテスト環境作ってやってみるべき。 >>772
>その上でそれを回避するような定番な方法や定石的手順の方法を知りたいのですが。
For Eachを使わない
単純に減るだけならFor Nextで逆順に回すのが定番
あとはループ用に別の列挙(コピー)を用意するか
>>774
FSOがどんな管理になってるかしらんが、名前の変更ってことは
古い名前の削除+新しい名前の追加 だと考えれば不思議はない そもそもActivesheet.UsedRangeなんだからシートに処理加えたら要素の数が変わるのは当たり前だろ
一回変数に入れたら困るわけ?
多分fsoのfilesも変数に入れたら固定されるんじゃねえの ユーザーフォームのボタンをクリックしたとき、ある条件を満たせばボタンの背景色を変えてます。
CommandButton1.BackColor = "&HFF00FF"
ボタンの色を元に(ボタンのデフォルトの色に)戻すのに↓だとエラー(型が一致しません)。どうすればいいんでしょうか?
CommandButton1.BackColor = "&H8000000F&" >>778
Debug.Print Typename("&HFF00FF")
Debug.Print Typename("&H8000000F&")
なんで""で括ってるの? >>779
""は不要でしたか。たぶんどこかのサイトにそのような記述があったんだと思います。
↓でエラーなく色変わりますが""なくてもよかったのか。
CommandButton1.BackColor = "&HFF00FF"
debug.printの結果はstringでした。そりゃそうか。 >>779
あ、書くの忘れてました。
↓これの""を取ったらエラー出ず色がもとに戻りました。ありがとうございました。
CommandButton1.BackColor = "&H8000000F&" >>774
VBAのforeachは扱いづらいよね。
for each file in folder.files なんかは一度別の配列なりcollectionなりに入れちゃった方がindexが動かないから無難。
range.deleteやrange.insertは一度のループで処理しようとせずに、別にループを回すか、index降順でループするのが無難。 for eachとcells()は相性が悪い
cells().deleteを絡めると参照が変な位置に飛ぶ(気がする)。理由はわからん
deleteを絡めるならfor next step-1にしたほうがいい >>778です。何度もすいません。
>>778の質問はダブルクオーテーションマークを削除して解決しましたが、
なぜ、CommandButton1.BackColor = "&HFF00FF"、はエラーが出ずにボタン背景色が変更され、
CommandButton1.BackColor = "&H8000000F&"、これだとエラーが出るのか教えて頂けないでしょうか? >>785
エラーが出る方は桁数が多いからじゃね? >>785
ちなみに、VBAはマクロの記録したものをネットで検索してちょっといじくる程度の初心者レベルです >>774
VBA独特のnewの特殊な仕様や、
setする度に生成される謎参照
vbaのforeach中に要素数を増減させるのはやめた方がいい
俺も絶対にしない。単純に間違うし、なんで間違うかもわからんから
Sub foo()
Set a = Cells(1, 1)
Set b = Cells(1, 1)
Debug.Print (a Is b) 'falseになる。参照しているアドレスも違う
End Sub >>786
"&H8000000F&"の方が文字数が多い(桁数が多い)というのはわかりますが、それでなぜエラーが出るのでしょうか? >>785
CommandButton1.BackColor = "&H8000000F"
でどう? >>789
コンソールで以下を叩いてみれ
? &H8000000F >>785
colorはlong型なので、右辺はlong型にキャストされている。
そんで、右辺=2147483663は、そもそもlong型の上限を超えているのでエラーになる。
まあその前に、色は256の3乗=16777216パターンなので、そこではねられてるかもしれない。 Debug.Print Typename(&H8000000F&)
Debug.Print Typename(Val("&H8000000F&"))
Longに見える文字列でも自動型変換では以前の型は考慮されないと思う。 >>794
typename(clng("&H8000000F"))
なんじゃね >>795
それじゃLongになっちまうだろ。
"&H8000000F&"が型変換でどう解釈されたかを調べてるんだぞ。
わざわざ最後に&付けてLong指定してるのにどうしてDoubleになるのかと言えば&付いててもStringなんだから&は考慮されないと予想。 確認したら、
clng("&800000F") => -2147483633
でキャストは通るね。間違い書いてすんません。 そもそもエラーって何のエラーかわかってないんだが
何エラー? >>798
Long型のプロパティにDouble型の値を代入しようとしたエラー >>799
エラーメッセージにそう出るの?
エラーメッセージを解釈した結果? .backcolorプロパティ内で範囲外エラーを返しているのかと思ったけど違うのかな? >>800
解釈した結果
そのために>>794書いたつもり。 >>801
""取ったらエラー出てないし、エラーも型が一致していないってことだから。
まあ、同じことでしょ。 >>802
それだと本当はDouble型かLong型かわからなくね?
暗黙の型変換でlong型になってるかもしれない
colorプロパティはlong型みたいだし >>804
Val("&H8000000F&")はDoubleだけど、
"&H8000000F&"を暗黙の型変換した場合はLongかも知れないということ?
だったらエラーは出ないんじゃね? 暗黙の変換やClng関数は、型指定文字があるとエラーになる
それだけ
ちなみにValは、型指定文字を無視する
試したけど
暗黙の変換でLongに収まらないときはオーバーフロー
型指定文字が入ってるときは型が一致しません
エラーの種類違うし >>807
"で囲ってない時はシステムカラー定数と認識されるけど
"で囲ってる時は型変換されてlong値になって値の範囲が不正になるのかな >>808
"&H8000000F"は16進表現として認識てきて 型変換してるけど
"&H8000000F&"は 最後に& があるから 文字列のままで 型変換してないんじゃないの?
なぜか 皆さん型指定文字と みなしてる みたいだけど おいらにゃ それが理解できない ちょっと補足
&H8000000F&
と書いたときの最後の& は型指定文字なのはいいんだけど
"&H8000000F&"
と書いたときの最後の& は型指定文字 ではないんじゃね? とおいらは思ってるって事 >>809
最後の&があると文字列のままで型が一致しないエラー
"を外すと最後の&が削除されてlong型になるね 最後の&が無いと"で囲ってても型変換されてエラーにならない
最後の&がエラーの原因だな >>813
それだと"&H8000&"でもエラーになる? トランスポーズすると、2次元配列を1次元配列に変換できる!!
使い道は分からない!!
以上!! >>818
おお、じゃあ変換できないので文字列のままでエラーってことだな。 >>817
横に並んだデータをサクッと一次元配列にしたいときに使う >>817
a. 2行2列を要素数4の配列にできる
b. 1行4列を要素数4の配列にできる
c. 4行1列を要素数4の配列にできる
どれが出来てどれが出来ないの? Transposeは一列もしくは一行の場合は強制的に一次元配列する。
なお同じ機能の関数を自作しても処理時間は変わらない模様。 便利だから使ってたけど処理時間変わらないのか
それは知らなかった
自作関数書くよりはちょっとお手軽くらいに思っとけばいいのかな WorksheetFunctionとかの一部の関数は処理時間見る限り全部VBAで書かれているか、あるいは同じレベルで実装されているみたい。
なんなら初めに条件を絞れる分、元から入っている関数よりも自分で書いた方が速い事もある。 すいません。
エクセル初心者です。
エクセルでハンゲームのオセロの棋譜を取得するツールを作ろうと
思ったのですがよくわかりません。
誰か作り方を教えてください。 >>826
その聞き方じゃ何もわからないし、君には無理だね >>826
君のレベルに対してやろうとしてることのレベルが高すぎる
あとめちゃくちゃめんどくさい
素直に棋譜の取れるオセロゲームやったほうが良い 多少面倒くさくても頑張ろうと思います。
ご教授お願いします。
やる気はあります。
ヒントだけでもm(_ _)m >>830
IEインスタンス作ってそこから中身引っ張り出して・・・
正直、内容がアホらしすぎて教える側にやる気が出ない ありがとう。
IEインスタンスってものを作れば作れるんですか。
もう少し踏み込んだヒントをください。
お願いします。 え?ハンゲームやろ?なんで急にインスタが出てくるんや? >832
この先は俺も知らないし、他の誰も知らない
インスタンスの中身を探っていけばその内見つかると思う >>833
インスタンスを使わない手段もあるんですか?
>>834
ありがとうございます。
インスタンスを探してみます。
一つ質問ですが
インスタンスってなんですか? >>835
いや普通に考えて使わんやろ?
それとも俺が知らんだけでハンゲームの棋譜がインスタにアップされてたりすんのやろか? >>838
よしよろしければインスタを使わない方法を御存知でしたら教えてください。 1)棋譜を君の脳内に取得して(記憶というw)
2)その脳内に取得した棋譜を 手入力という手法を使ってexcelへ転記する
-完成- >>839
まずハンゲームをダウンロードしたらええんとちゃうか? >>841
ハンゲームはダウンロード済みです。
ダウンロードしないとゲームができません。
その後はどうすればいいの? >>843
ああそうなんかw知らんかったw
ハンゲームがあるんやったら次はおもむろに
wiresharkとかfiddlerを立ち上げて通信の傍受やろな普通は >>846
一応いっとくけど、エクセルの問題じゃないからね >>847
VBAってものを使えばいいんですよね?
それは承知しております。 >>846
ちなみにVBAはどの程度知っているのか?
Option Explicit って知っている? そもそもハンゲームのオセロがどういうものかわからないし
たぶんUWSCあたりで盤面を画像処理で認識して記録していくのが一番手っ取り早いと思う
これなら調べながら誰でもできる VBAはよくわかりません。
ただVBAを使えばなんでもできるという話を聞きました。
これから勉強しようと思ってます。
Option Explicitは聞いたことないです。 >>850
ハンゲームオセロの棋譜取得ツールは既に作って公開されてる方がいます。
画像認識で高速で打つオセロの棋譜なんかも取得できるものなのでしょうか?
公開されてるツールはVBAではありませんが、何か画像認識とは異なるようです。 >>851
完成目標 10年後くらいで勉強していけw >>852
じゃあそれ使ってログを読み込めばいいだけじゃんw >>853
10年かかっても勉強する根気はあります
VBAを始めるにしても具体的に何の勉強が必要なのか
そのヒントが欲しいです
>>854
ログを読み込むというのは別の人が作ったツールを使うってことでしょうか?
自分で作りたいのです。 >>856
逆にお返ししますが
冷やかしならvipでやれ
僕は真面目に質問してます。 >>855
プログラミングの初歩から勉強しないといけないわけで。千里の道も一歩からなんで
とりあえずはVBAの入門書でも見繕ってそれを勉強していけよ。やりたいことはそういう基礎が
出来てからの話なんで
後、あまり続けけるとここの住人から怒られるよ(もう既に怒り始めてるけどw) 入門書は見たことがありますが
棋譜の取得方法が載ってませんでした 10年かかってオセロの棋譜を取得、結構面白かったw >>859
そんなピンポイントに自分の希望するネタが載ってるかってのw
後、俺もコレに関しての書込みはもう止める ピンポイントで載ってないのは知ってますよ。
これが最後の質問なのでどなたかマジレスお願いします。
オセロの棋譜を取得するには入門書の次はどの書籍で何を勉強すればいいですか? まだやっとったんか
もう少しマジメにこたえてやろうか? Excelで作成済みの表で太線部分をすべて二重線に変更するとか
通常の太さの線をすべて点線に変更するような処理をVBAでできますか? オマエラ、回答スキルがないから冷やかしや煽りしかせんのだろ
こんなスレで質問した僕が愚かでした >>866
できる
マクロの記録見ながらやればok
とりあえずテキトーに作ったのは以下
セルをテキトーに範囲選択して以下マクロを実行すると、全部の罫線を調べて何か色々やる
Sub Macro1()
For Each cell In Selection
For Each line_item In cell.Borders
If line_item.linestyle = "" Then 'ここで判別
'テキトーに処理
End If
Next
Next
End Sub >こんなスレで質問した僕が愚かでした
これ言いたかっただけやろ 棋譜作成ツールの存在を知ってたんなら、まず制作者にコンタクト取ればいいのに。 普通そういう対戦ゲームってテキストかなんかでゲームヒストリー保存されてるんじゃないの? >>867
ちがうよ
質問が間抜けすぎると回答できないんだよ
野球未経験者に150キロの投げ方教えろって言われても無理なもんは無理 >>871
ハンゲームはフラッシュだからな〜
IEの中身見て、フラッシュの中身見て…
暗号化やプロテクトがかかってると更にめんどくさい、ってかお手上げ >>873
残念。
野球素人にも正しいフォームとトレーニング方法を教えれば
150キロは無理でも120キロの球なら投げられる。
僕はこのスレで質問しても120キロの投げ方のヒントすら得られなかったよ。
120キロの投げ方でも教えてくれればオマエラを尊敬したのにね。
>>874
ハンゲはフラッシュゲームもあるけど
僕が質問してるのはFlash版じゃない方ですよ。 >>875
まぁ身に付くかは別問題だし
教えるなら150の香りがする方よ。
君?
匂う臭う 調べて分かる事すら訊いてくる性格の人には何教えても身につかないしね。 >>875
すまん例えを間違えたわ
サッカー選手にそれを聞いてるようなもんだわ
なぜならハンゲームの仕組みは専門外だから
まずは棋譜がどのような仕組みで配布されているのか、いないのか
ダウンロード出来るのか出来ないのか
アプリはどんな形で配布されているものなのか
質問するならそのぐらいは情報としてないとね
ハンゲームのことなんて知らないからさ >野球素人にも正しいフォームとトレーニング方法を教えれば
>150キロは無理でも120キロの球なら投げられる。
その素人が練習したらだろ?お前、練習すらしねーじゃん。練習した上で抜かせヴォケ 2ちゃんねるをプロが集まる場所だと勘違いしたんだろうよ いやお前はどっちにしろ答えられんから正解かもしれんけどw >>851
「VBAを使えばなんでもできる」という話は信じ込んでいるわけか。
でもこのスレでの忠告は聞かない、と。
なかなか変わった精神の持ち主だ。 既にハンゲームのオセロの棋譜を取るツールがあるんだから作れる事は作れるだろうけどね。
ただ言語的な向き不向きがあるから。 ユーチューバーは収入の仕組みが違う?!どっちが儲かるか?
http://youtube-youtuber.com/360.html
従来型のユーチューバーは、広告収入をメインの収入源としています
1.動画にのせる広告(動画広告+画像広告)からの報酬や
2.スポンサー収入(企業からの依頼を受けて商品を紹介)
海外のユーチューバーの傾向として、広告収入ではなく、自分のビジネスを
メインにすることによって広告収入を遥かに超える収入を叩き出しています。
例えば、beauty guru(美のカリスマ)と謳われる、ユーチューバーのミシェル・ファンは
広告収入は1800万得ていますが・・他方で美容化粧品会社Ipsyを立ち上げて、
年収1億ドル(約110億円)を売り上げました。
彼女は「メイクのチュートリアル動画」を投稿していますが、動画の中で自分の会社の商品を
使っているんです。
そしてその中で使った商品を、online shopで買える仕組みにしています。
他人の商品を紹介して、そこから「おこぼれ」を貰うより、自分の商品を売った方が
遥かに儲かりますからね。
リンジー・スターリングは踊りながら、バイオリンを演奏する、アーティストですが・・・
彼女の場合も、あくまでも動画を投稿するのは、自分のビジネスである、
ツアーチケットやアルバムの販売のためなのです できるけどハードル高過ぎだよな。
UIAutomationで攻めるかWindowHandleで攻めるか、それともGDI+で攻めるかになると思うけど。
意外にGDIplusで攻めるのが簡単かもね。 お前らが丁度盛り上がれる質問てめちゃくちゃ幅が狭いよなw
それよりちょっとでも上か下にずれたら質問者総叩きっていうw >>889
9割ぐらいのまともな質問は一瞬で回答して終わるから、そう見えるだけだよ >>890
盛り上がれる質問の幅が狭い
↓
そもそも一瞬で終わる質問は問題になってない
わかるかな?
でお前にはどう見えてるの?言うてみ?w プロはブログかTwitterだろう
2ちゃんとQiitaは素人ばっかり 実績のある個人を追跡しやすい媒体に比べたら不特定多数が参加できる媒体は敷居が低い分ノイズが乗りやすいからね。
どんなふうに検索しても見つからない時、糸口になればいいなくらいの気持ちで付き合っていくべきでしょ。 >>892
Excelのユーザー操作ということでいいんだよなこのスレなんだから
「貼り付けた」イベントは無理じゃね?俺の知ってる範囲だとだけど
「貼り付けようとしている」イベントは一応取れそうな
https://msdn.microsoft.com/ja-jp/library/cc377048.aspx
ショートカットキーまで考えるとWin32APIまで要りそうな気がするな
もっとストレートにやりたいこと書けばもうちょい回答出そうだけど >>892
少し前に組んだことある。
たしかUndoの情報にアクセスしてゴニョゴニョ、、 >>889
質問が悪いから仕方ないよね
もう少し具体的に質問してくれたら盛り上がれたかもしれない レベルの低い質問のにはレベルの低い回答しかできないってだけなんだが プロなら質問内容を精査してちゃんと答えたりするんだろうが所詮吹き溜まりだからなぁ
俺らにゃ難しいな >>900
俺もしないよ
なんで無料でそんなことしなきゃならんのだ >>900
吹き溜まりっていうか、普通のユーザーしかいないってだけだろう 野球がどうこう言ってるやつは野球板に行って同じ発言してこい
「プロはいないのか?ここは雑魚ばっかりだな」 >>901
お前が回答する義理がないのはもちろんだが
回答できないからといって質問者を妨害する行為はいただけないな でもあの質問者はvbaってよく知らないけどなんでも出来るって聞きましたってレベルだったからな
答えわかる奴がいても伝えられなかっただろうな 回答するしないは自由だが
回答できない雑魚はROMってろ
無能な癖に
「俺様は優秀。なんでも回答できる。でも、お前には回答してやらない」
こんなハッタリをかますアホが居るからスレが荒れるだけやろ?
雑魚は黙ってROM
これが2CHのルールやで >>910
そんなルールあったか?
あったとしても守らないといけないのか? まあ大抵において、俺ルールを押しつけようとする奴が現れると荒れるわな ワッショイ
ワッショイ
└(゚∀゚└) (┘゚∀゚)┘ >>911
「俺様は優秀、でも回答してやらない」アピールをすることに何の意味があるの?
お前は法律がなくなれば明日にでも人を殺すのか?
>>910に書くルールがなくてもマナーとしてはアタリマエのことだろ? >>914
お前には、誰のどんなレスも止められない
この程度のことがわからない奴が暴れるから荒れるんだよ 質問スレは
質問者が質問をし
回答者が回答するスレやで
雑魚が自分アピールするスレちゃうよ >>905
俺はちゃんと要件伝えてねってそれしか言ってないが >>916
質問スレであって 回答スレじゃないと思うが
ここの存在意義?? 知らん 楽しけりゃなんでもいいんよ 質問スレは
・質問
・回答
・誘導
・スルー
この4つだけでいいよ
次スレのテンプレに入れておいてな ここが気に入らないんなら、teratailあたりにでも行けばいいんじゃないですかね >>919
質問したけど回答が満足行かないから俺ルールを強制するってみっともないよ 優秀なオマエラのVBA作品が見てみたいな
どれほどのスキルが有るんやろなw たかだか2ちゃんのスレに本気になりすぎだろ
肩の力抜けよ
そもそもお前のルールから行くと自治もいらんからな 本気にはなってるが熱くはなってないよ
オマエラがExcelでハンゲの棋譜取得ツールを作ってうpしたら
俺は土下座したるわ どんなに壮麗雄大なVBA作品でもその目的にかなうものでないとダメ クラスモジュールにメソッド記述できるの?コンストラクタ機能する? 暴れてるのはやっぱり棋譜君かw
もう来ないっていう奴に限って粘着するんだよな
自分にできないことをタダで教えてもらおうとしてるのに、変に態度がデカイから叩かれてるって状況なのは理解できてんのか? >>928
> クラスモジュールにメソッド記述できるの?
もちろんできる
> コンストラクタ機能する?
もちろん機能するが、引数は受け取れない >>928
Private Sub Class_Initialize()
というメソッドがコンストラクタに相当するが引数を取れない。
各メンバを任意の値で初期化することがここではできない。
別なユーティリティー関数(createなんちゃら系)を用意するとかすればいいけど面倒だしかなり制約がある。 >>929,930
お前ら変に態度がデカイな
というか分不相応に背伸びしてるなw >>933
お前は素直に悔しさがにじみ出ててある意味好ましいなw
せやけどワイは棋譜君ちゃうでwどこに目つけとんのやボケカスw >>931
>各メンバを任意の値で初期化することがここではできない。
詳しく >>935
任意じゃなくて生成時に(任意の値を)指定できない
って言いたかったんだと思う
固定でいいなら Class_Initialize() で設定すればいいだけ >>935
Private Sub Class_Initialize(ByVal a As...)
というふうに任意の引数を取れたなら、コンスタラクタ内で
member_a = a
とメンバを初期化できるけど、残念ながらそうはいかない。
Setterメソッドを作るとかProperty Setするとかでもいいんだけど、
最初にコンストラクタで設定した後はconsantにしたい、などといったありがちな要件の実装がたるい。 >>925
多分出来ると思うけどさ、ハンゲってインストールしないとダメだろ。
正直、めんどくさい。
あと、どう記録するかがちょっと気になる。
自動で記録するとなると処理スピード的にどうなんだろという疑問も有るな。 コンボボックスクリックのイベントで、2回動作するのは何で?
一応、実行フラグを作って、
1回毎にフラグ反転させれば回避できるけど、
2回動くのがデフォって、仕様としておかしくない?
何か重要な意味があったりする?
大事なことなので2回動きましたとか? 昔、ステータスバーの文字列を取得するコード書いた時と同じようにすれば多分いける。
最初UIAutomationやWindowHandleで組んだんだけど取得出来ない。
どうやらBitblt系で描画してるだけみたいだったんでGDIplusで画像から取得した。
文字は数字だけで位置も決まってたからできたわけで、どんな場合でもといわれると大変だろうな。
オセロの場合は64マスのそれぞれの中心の1点の色を取得するだけで判断できそうだ。 >>941
優秀なVBAの達人さん。
お待ちしております。
VBAのプロなんだからハンゲインストールくらい余裕だよな?
VBA初心者の俺でもハンゲインストールはワンクリックで出来たよw オマエラがスレ荒らしてる間に俺は勉強して
メッセージボックスにハローワールドを表示できるようになったわ
このペースなら一ヶ月で棋譜取得も余裕だな >>951
棋譜君がやっと自分でやる気になったんだから、そっとしておいてやれよ >>951
できない自分に悔しさ感じないとか
変わったお人ですね むしろ特定の目的をもってプログラミングを学ぼうとすることが羨ましい。
俺にそういうものはなかった。 「vba初心者の棋譜くんがハンゲから棋譜を取得するスレ」でスレたてすれば勉強してて分からないとこを質問できるし良いアイデアももらえるかもしれないよ
棋譜くんがんばれ >>945
そうじゃなくてインストールしたくないという話。
コードも面倒くさくなりそうだってのも含む。
>>948
多分、数年はかかるんじゃない?
そんなレベルなら。
20年前の俺もExplorerみたいなの作りたいとか難易度も知らずに無謀なこと考えてたけど。 なんでお前に教えるために興味のないアプリをインストールしなきゃならんのだ
前提がおかしいんだよな
俺が間違ってんのか? >>950
おう!俺は出し惜しみしないぜ
>>955
うん、頑張るよ
スレ立ても躓いたら検討するよ
>>956
20年て。。。
プロ通り越して仙人やないかいw
プログラミングの仙人でも難しいのか。
目標はそれくらいの方がええわw 目標は高く持つけどVBAなのか。
止めはしないけど 手始めにVBAでアルゴリズムの基本を学んだ後に別の言語へ移ろうと考えてます。
情報量も多いし、敷居も低そうなので。。。
JavaScriptとどちらにしようか悩んだけどExcelが使えるのでより直ぐ形になると考えたんだけど
選択を間違えてるかな? rubyを勧める理由ってなんですか?
プログラミング入門に向いてるの? わざわざ他の言語が使える環境なのにVBAでやる必要性はたしかに無い
不親切だからな >>957
そもそもお前には他人にものを教えられる程の知識も技能もねえじゃんw
根本からお前が間違ってるわw ホントそれ
質問に難癖つけてるだけにしか見えないよね
>>878
> なぜならハンゲームの仕組みは専門外だから
だったら専門のスレを紹介するなり、それが面倒なら最初から黙ってろ
結局、こんなことを要求しても
> まずは棋譜がどのような仕組みで配布されているのか、いないのか
> ダウンロード出来るのか出来ないのか
> アプリはどんな形で配布されているものなのか
> 質問するならそのぐらいは情報としてないとね
何のアドバイスもできず、さらに質問者を煽るしかできないなら
最初から要求するなってはなしだよね お前らまだやってたのか
だから最初からスルーしろって言っただろw >>964
rubyか!
和製ってのが面白そうだね。
候補に入れとくわ。 勘違いしてるといけないから一応言っとくとVBAはなんでもできるわけじゃないぞMSオフィスで出来ることしか出来ない
オフィス高いしどうしてもオフィスを使わないといけないという理由がなければRubyとかpythonやった方がいい >MSオフィスで出来ることしか出来ない
そうなのか。。。
棋譜取得とか無理なの?
人工知能にも興味あるのでPythonってよく聞く名前だなあ。
ありがとう。ちょっとググってみる。 最終的にはマイコン制御、Androidアプリ、人工知能の開発をやりたいんだけど
Rubyとpythonは向いてますか? >>972
色々やりたいならjava覚えておくといい。一番潰しが効く
pythonもいい。アメリカでは児童の教育にはpythonが使われている。ただ色々と癖が強い
Rubyは楽だけどなんだかんだで使えない器用貧乏 マイコン制御やるならマシン語から覚えるべきじゃないかな。 >>974
トンクス。
入門にpythonかRubyを選択して
行く行くはjabaって感じがいいのかな。。。
勉強します。 windowsAPIとかをExcelVBAの範疇に含むのかという微妙な線引き 含みはしないだろどう考えても
いろいろ作ってると必要になる場面があるのも事実だから
どこまでこのスレで受け付けるのかとなると微妙な線引きだけれどさ 基本的に参照設定の要らない範囲だけに絞ってしまえばいいのでは。
機能を名指して来た場合は個別に答えるものとすれば、質問スレとしては用が足りる気がするけど。 >>971
無理じゃないけど何故?ってのがある。
>>977
>>978
>>979
他の言語だってライブラリ込みだろ。 jabaという言語が有るのか
不勉強でしらなかった エクセル2019あたりで、セルにレイヤーが付いてくれるといいなぁ。
今のままじゃ、BGが1枚しか使えないファミコンみたいだ。 シェイプのコントロールはどこのスレですか?ここで良いですか?
>>984
シェイプの半透明化とかシェイプの長方形をセルにピッタリフィットで
並べて重ねまくることは出来ないんですか? >>984
セルにレイヤーをつけてどう使う?
表計算ソフトなんだけど >>988
別に一つのシートでレイヤーにする必要は無い 既に複数シートあるんだからそれをレイヤーに見立てればいいんじゃね? >>989
そうですね。巨大なマップにすりゃ良いのか。。。
アニメやゲームみたいに数千枚のシート作って追加削除を秒以下で更新出来るのかなと思って。 >>991
そんな要件があるならExcel vbaを使わないのが正解じゃね? >>992
おっしゃる通りです。データベースとのやり取りやCSVファイル保存とか、
GUIを一から書かずにセルの挙動を見える化したかっただけの興味本位です。 >>987
2重スクロール。
じゃなくて、普通にサブウインドウ。
リストビューだと、制限多すぎだし。 梅ついでに
>>984
ここ辺りで提案してみるとか 賛同が多いと一応は検討はしてくれるみたいよ
https://excel.uservoice.com/ このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 40日 18時間 16分 42秒 2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。