トップページtech
1002コメント383KB

Excel VBA 質問スレ Part39 [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/11/27(金) 20:36:45.35ID:9HV+ag/s
ExcelのVBAに関する質問スレです

                   ___
       ___      /____ヽ      ____
      /____\    | |´・ω・`| |    /___ヽ
      .l |´・ω・`|  ニX二 . ̄ ̄ ̄  二X二  |´・ω・`| l 俺たちに任せろ
      !、 ̄ ̄ ̄  ヽ   |       |    /    ̄ ̄ ̄/
       ヽ_/ヽ、  ヽ__)  \__/\_/.   /_/  ノヽ_/
             ̄                ̄ ̄

このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。

コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。

※前スレ
Excel VBA 質問スレ Part38 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1441619979/
0267デフォルトの名無しさん2016/01/06(水) 16:26:44.21ID:uGhm1id+
Private Function Reset(ByRef ls As Collection, ByVal k As String, ByVal v As Variant)
ls.Remove k
ls.Add Item:=v, Key:=k
End Function

Public Sub Test()
Dim list As New Collection
list.Add New Collection
list(1).Add New Collection
list(1)(1).Add Item:=123, Key:="key"
Reset list(1)(1), "key", 456
' Dim list_sub As Collection
' Set list_sub = list(1)
' Reset list_sub(1), "key", 456
MsgBox list(1)(1)("key")
End Sub

これが関数呼び出し時にエラーになるのは何故でしょう?
コメントアウト部の方を有効にするか、ByRefをByValにすると正しく動くので構わないんですが
もしかしてコレクションはByValで渡すのが当然とか?
0268デフォルトの名無しさん2016/01/06(水) 16:47:03.10ID:9dwHBHIu
>>266
Google Spreadsheetでも使って下さい。
0269デフォルトの名無しさん2016/01/06(水) 18:33:10.74ID:jZfE0I4k
>>267
Reset list(1).Item(1), "key", 456
とかなら呼び出せるっぽい

デフォルトプロパティの評価あたりでおかしな事になってるのかもしれん
実はItemは真のデフォルトプロパティじゃないし
0270デフォルトの名無しさん2016/01/06(水) 20:01:54.35ID:uGhm1id+
>>269
そういう方法がありましたか
ありがとう
0271初心者A2016/01/06(水) 20:04:38.71ID:tBMwYmRt
初歩的な質問で、すいません。配列とかFor〜Nextのとこなんですが、
うまくいかなくて、悩んでます。

■■■■質問
'SH2のE列に、次のように出力するためには、どのようにコードしたら
いいか教えてもらえませんでしょうか?
0272初心者A2016/01/06(水) 20:05:11.36ID:tBMwYmRt
-----
2
3
4
5
-----
1
3
4
5
-----
1
2
4
5
-----
1
2
3
5
-----
1
2
3
4
-----
0273初心者A2016/01/06(水) 20:06:39.51ID:tBMwYmRt
■■■■前置き(その1)
No(1)=1
No(2)=2
No(3)=3
No(4)=4
No(5)=5
の配列を、違うシート(シート名:sheet2name)に出力したい。

動的配列ですが、NUM1=5として考えやすくしてみました。

計算結果を出力するシートを、
Set SH2 = Worksheets(sheet2name)とする。
0274初心者A2016/01/06(水) 20:07:07.71ID:tBMwYmRt
■■■■前置き(その2)
1
1
1
1
-----
2
2
2
2
-----
3
3
3
3
-----
4
4
4
4
-----
5
5
5
5
-----
0275初心者A2016/01/06(水) 20:07:24.26ID:tBMwYmRt
■■■■前置き(その3)
と出力するために、次のようにコードしました。
--------------------------------------------------
r = 0
t = 1
For s = 1 To NUM1
For q = r + 1 To r + NUM1 - 1
SH2.Cells(q + 2, 4).Value = No(t) 'SH2のD列にデータ出力
r = r + 1
Next q
t = t + 1
Next s
--------------------------------------------------
0276デフォルトの名無しさん2016/01/06(水) 20:30:41.31ID:5UG3hvjQ
動的配列のLBoundの値を変更するのにRedim Preserveを2回使うテクニックがあるけど、
真っ当な技と言えるんでしょうか?
0277デフォルトの名無しさん2016/01/06(水) 20:37:10.97ID:cINiOzEy
>>271
質問がとっちらかっててよくわからん
とりあえず>>272のコード

Sheets("SH2").Activate
num = 5
r = 1
For i = 1 To num
  For j = 1 To 5
    If i <> j Then
      Cells(r, 5) = j
      r = r + 1
    End If
  Next
  Cells(r, 5) = "-----"
  r = r + 1
Next
0278デフォルトの名無しさん2016/01/06(水) 20:38:10.90ID:cINiOzEy
For j = 1 To 5

For j = 1 To num
の間違い
0279初心者A2016/01/06(水) 21:15:55.49ID:tBMwYmRt
>277
やってみます。ありがとうございます。


http://ww10.puny.jp/uploader/download/1452081929.xls


パスワード:abc

Module1で試行錯誤中です。

SH2(シート名:計算結果)の【F列】
SH2.Cells(u + 2, 6).Value=
にデータ出力したいです。

初心者なんで難しいです(>_<)
時間かかりそうです。
0280初心者A2016/01/06(水) 21:30:56.38ID:tBMwYmRt
おかげさまで、できました(^^)/ありがとうございます
下記のコード

r = 1
For i = 1 To NUM1
For j = 1 To NUM1
If i <> j Then
SH2.Cells(r + 2, 6).Value = No(j)
r = r + 1
End If
Next j
Next i
0281デフォルトの名無しさん2016/01/07(木) 00:21:58.78ID:GoyK1MG8
>>277みたいにシートをActivateやSelectして
Cellsの親を省略するみたいな書き方って気持ち悪いと思いませんか
扱うシートが増えたりしたらどうするんですか
0282デフォルトの名無しさん2016/01/07(木) 01:36:13.89ID:w0ujcVRl
シートが増えれば大変なのはどちらも同じ
好きな方を使えばよい
0283デフォルトの名無しさん2016/01/07(木) 08:35:20.93ID:bWvRU875
サンプルの書き方は本当の書き方と多少違うだろう。
0284デフォルトの名無しさん2016/01/07(木) 09:09:34.45ID:QNCWlpNp
>>282
どちらでもよくない。
処理中にシートが切り替わると副作用があるので、必ずsheet1.cellのように指定する。

個人で作って使うなら何してもいいが、人に渡す時はそんな舐めたことすんじゃねーぞ
0285デフォルトの名無しさん2016/01/07(木) 09:29:17.60ID:bWvRU875
>>284
人に渡すってどういう意味?
0286初心者A2016/01/07(木) 12:18:16.88ID:pq62efvo
■やりたいこと
下記のURL先のエクセルファイル
(ファイル名:2点間距離の差011)の
計算結果シートにて、
●D値が多い順の表を完成させたい。
●D値の合計が大きい順の表を完成させたい。

どうコーディングすればいいか、アドバイス
頂けると幸いですm(_ _)mぺこり

http://ww10.puny.jp/uploader/download/1452136421.xls
パスワード;abc
0287初心者A2016/01/07(木) 12:19:39.64ID:pq62efvo
2つの座標系を用いて、
点間距離の差を計算結果シートのO列に表示しています。

座標入力シートのG2セルにて、
点間距離の差がある値より大きいものをD値としています。
計算結果シートのO列で、そのD値より大きい値を赤くしています。
-----------------------------------------------------------
例えば、
点名A1 点名B1では、D値が多い順の個数は、
2個です(赤くなっている文字が2つ)

例えば、
点名A1 点名B1では、D値の合計が大きい順の合計(mm)は、
51.5です。
0288デフォルトの名無しさん2016/01/07(木) 17:52:38.68ID:2nH+0Iqy
単純に考えて
a1-b1
a2-b2
a3-b3
の表完成させて並び変えたら
0289初心者A2016/01/07(木) 18:17:44.40ID:pq62efvo
>>288 たしかに、並び替えは後ですね。
ここまで、できました。

現状で満足してますが
できれば、VBAを用いて、ソートしたい。

http://ww10.puny.jp/uploader/download/1452157302.xls
パスワード:abc

上記URL先のエクセルファイル(2点間距離の差016.xls)
の計算結果シートにおいて、
(表:D値の個数)個数をキー(多い順)として、ソートしたい。
(表:D値の合計)合計をキー(大きい順)としてソートしたい。

■これ勉強しなきゃいけないんかな?
VBAでクイックソート
http://howto-it.com/excelvbaqsort.html
http://excel-ubara.com/excelvba5/EXCELVBA229.html
0290初心者A2016/01/07(木) 18:24:25.57ID:pq62efvo
エクセルの標準機能で、いっかな(´・ω・`)

ホーム→
→並び替えとフィルター
→ユーザー設定の並べ替え
→列にて、優先されるキーで、個数または合計を選択
→順序で降順
→OKボタン
0291デフォルトの名無しさん2016/01/07(木) 18:33:25.91ID:2nH+0Iqy
並び替えする前に新しいマクロの記録コマンド
並び替え終わったら終了コマンド
すると操作が記録されたVBAプロシージャが取得できる
0292デフォルトの名無しさん2016/01/07(木) 19:09:08.14ID:v5mg4Nrt
OFFICE次バージョンからVBAが廃止されるかもとネットで見た。ウチの会社オワタ
0293デフォルトの名無しさん2016/01/07(木) 19:11:08.03ID:bWvRU875
>>292
どこのソース?
一般企業での利用者の存在数から考えて無理だと思う。
0294デフォルトの名無しさん2016/01/07(木) 19:37:43.86ID:2nH+0Iqy
というか基本的にOFFICEのバージョンアップは不要
しかしエクセルでマイナンバーとか管理されたら
それに近いところでVBAが動いてたらまずいでしょ
だから時代についていくためにVBAを切り捨てる必要がある
0295デフォルトの名無しさん2016/01/07(木) 19:47:50.85ID:bWvRU875
そんな日本だけの事情でマイクロソフトが動くのか?
0296初心者A2016/01/07(木) 19:54:26.63ID:pq62efvo
エクセル2007以降のバージョンなら、どのバージョンでもいい。
0297初心者A2016/01/07(木) 19:57:16.31ID:pq62efvo
>>291

そうでした。マクロの記録がありましたね。
やってみます。2行〜最終行を選択ればいいのかな?
0298デフォルトの名無しさん2016/01/07(木) 19:58:23.02ID:2nH+0Iqy
>>295
サポートじゃなくてセールス文句だから
ネットにつないでも安全なエクセルって感じかな
0299初心者A2016/01/07(木) 23:46:18.98ID:pq62efvo
Const sheet2name =
0300初心者A2016/01/07(木) 23:47:38.29ID:pq62efvo
Const sheet2name = 計算結果(※ダブルクオテーション略)

Sub 並べ替え()

Dim SH2 As Worksheet
Dim GYO4 As Long, NUM4 As Long, x As Long

Set SH2 = Worksheets(sheet2name)

'R行の3行目から最終行までリサーチ
'NUM4は、並び替えるデータの個数
For GYO4 = 3 To SH2.Range("R65536").End(xlUp).Row
NUM4 = GYO4 - 2
Next GYO4

SH2.Sort.SortFields.Clear
Range(SH2.Cells(2, 18), SH2.Cells(NUM4 + 2, 21)) _
.Sort Key1:=SH2.Cells(3, 21), order1:=xlDescending, Header:=xlYes

End Sub
0301初心者A2016/01/07(木) 23:49:14.75ID:pq62efvo
並べ替えって基本的にこれだけなんだ(´・ω・`)ほ〜

SH2.Sort.SortFields.Clear
Range(SH2.Cells(2, 18), SH2.Cells(NUM4 + 2, 21)) _
.Sort Key1:=SH2.Cells(3, 21), order1:=xlDescending, Header:=xlYes
0302デフォルトの名無しさん2016/01/08(金) 00:32:14.62ID:AwkBQm6q
シート上のソートはどこかにキー列がないと機能しないのがちょっと不便だけど、
簡単ではある。
0303デフォルトの名無しさん2016/01/08(金) 06:38:04.99ID:ZpBAcVz8
VBAの求人117件の平均最低月給224,500円
http://jobinjapan.jp/job-listing/keyword-vba.html
0304デフォルトの名無しさん2016/01/08(金) 15:12:20.20ID:9Hdlf+du
>>276
そのテクニックというもの自体知らないので、
よろしかったらもっと詳しく教えてください
0305デフォルトの名無しさん2016/01/08(金) 16:51:24.45ID:VkXSxnl8
>>304
Dim v As Variant
'LBound=0 : 長さ3の配列
ReDim v(0 to 2)
v(0) = 0: v(1) = 1: v(2) = 2

' LBoundを1に変えたい
' LBound=1 : 長さ4に拡張
ReDim Preserve v(1 to 4)
'長さ3に戻す
ReDim Preserve v(1 to 3)

こうするとLBoundの値は確かに変わるし、巨大な配列でも一瞬で終わる。
これが仕様的に正しいと言えるのか不明。ループでやると仕様的な不安はないけど時間は掛かる。
0306デフォルトの名無しさん2016/01/08(金) 18:00:56.80ID:1fL2vwQ7
> ReDim Preserve v(1 to 3)
これ一回じゃあかんのか
0307デフォルトの名無しさん2016/01/08(金) 18:07:13.41ID:VkXSxnl8
>>306
なぜかダメ。
長さが変わらないからやる意味なしと判断されるのか...は不明。
0308デフォルトの名無しさん2016/01/08(金) 18:20:31.18ID:u+GM9q1y
>>305
意味がよくわからない。

Sub foo()
  Dim a As Variant

  ReDim a(0 To 2)
  Debug.Print LBound(a) & " To " & UBound(a)

  ' Lowerのみ変更
  ReDim Preserve a(1 To 2)
  Debug.Print LBound(a) & " To " & UBound(a)
End Sub

結果:Lowerは変わっている
0 To 2
1 To 2

Sub foo()
  Dim a As Variant

  ReDim a(0 To 2)
  Debug.Print LBound(a) & " To " & UBound(a)

  ' 両方変更
  ReDim Preserve a(1 To 3)
  Debug.Print LBound(a) & " To " & UBound(a)
End Sub

結果:両方変わっている
0 To 2
1 To 3
0309デフォルトの名無しさん2016/01/08(金) 18:37:10.31ID:VkXSxnl8
>>308
えー?
下のfoo は自分の環境では
0 To 2
0 To 2
と出るんだけど?

Office 2010 Excel 14.0.7163.500(64bit)
Visual Basic for Applications 7.0
0310デフォルトの名無しさん2016/01/08(金) 18:45:54.37ID:ujpdqUME
>>305
ヘルプ(2007)には
>キーワード Preserve を使用した場合、動的配列のサイズを変更するために変えられるのは、添字の上限だけです。添字の下限を変更しようとすると、エラーが発生します。
って書いてあるな

>これが仕様的に正しいと言えるのか
やってみたが2007では出来てるみたいだが、ヘルプには出来ないと書いてあるのだから
仕様的に正しいとは言えないと思うが

過去のバージョンではホントにエラー出てたような気もするんだが
いつの間にかこっそり拡張されたのかねぇ
0311デフォルトの名無しさん2016/01/08(金) 18:53:30.77ID:ujpdqUME
>>309
2007の32ビットなら、>>305>>308も出来るっぽい

下限を変えたときに、要素がずれるのか下限側の要素が切り捨てられる(または
初期化された要素が追加される)のかは確認してない

この辺も明示されていないから、ReDimで下限変えるのは
環境依存で危険な方法だと思った方が良いんじゃない
0312デフォルトの名無しさん2016/01/08(金) 18:55:30.64ID:VkXSxnl8
レスくれた皆さんありがとう。
これを使ってLBoundを変更する機能、急にいらなくなりました。
なんでこんな質問をしたかというと、ワークシートから取得した配列(Range(範囲).Valueで取れるやつ)のLBoundを手っ取り早く0にしたかったからです。
だけどその場合は2次元配列となり、1次元目のReDim Preserveはどうやってもダメだと気づきました。
どうもすいません。
0313デフォルトの名無しさん2016/01/08(金) 18:58:01.58ID:1fL2vwQ7
>>310
検索するとこんなのがあったけど
a)キーワード Preserve を指定した場合、変更できるのは、動的配列の最後の次元のサイズに限られます。
また、次元数は変更できません。

b)つまり、キーワード Preserve を使用した場合、動的配列のサイズを変更するために変えられるのは、添字の上限だけです。
添字の下限を変更しようとすると、エラーが発生します。

つまりだからbはaの2以上の次元配列の話

v(3,5)
の3は変えられなくて5は変えられる
添え字の上限とは5(数値じゃなく一番右にあるって意味)のこと
0314デフォルトの名無しさん2016/01/08(金) 19:09:45.61ID:ujpdqUME
>>313
もし2次元以上の配列に限る話だったとしても、その意味は
(3, 1 To 5)を(3, 0 To 5)に出来ませんって事
次元と添字の上限下限は別の話。上限下限は次元ごとに存在んするんだよ
0315デフォルトの名無しさん2016/01/08(金) 23:46:16.59ID:EVmIpiZQ
>>292
アホな
0316デフォルトの名無しさん2016/01/09(土) 09:51:48.56ID:eE0tOkYT
アホな話かも知れないけど無くなるかも知れないってよ
Excelの自動操作をしたければ外部からやれってことらしいね
ついでにワードみたいに1アプリケーション1ブックしか開けなくなるかもってよ
0317デフォルトの名無しさん2016/01/09(土) 10:03:01.20ID:ba2w/O62
ワードはマルチドキュメントじゃなくなっただけだろう。
アプリケーションで複数のブックを開けなくなるなんて退化はあり得ない。
0318デフォルトの名無しさん2016/01/09(土) 10:31:05.76ID:c5DKVMyA
ないってよ
らしいね
かもってよ
www
0319デフォルトの名無しさん2016/01/09(土) 19:46:58.98ID:DEcEG5aT
ソースもださずにネットで見たとか言う話の信頼性をどうこう言っても
0320デフォルトの名無しさん2016/01/09(土) 20:11:29.37ID:h3R10OzO
グローバル変数や、Public Subの名前を変更したいとき、
それを確実にすべて変更する方法ってありますか?

置換は確実じゃないのでダメです。
例えば、manという変数をmaleに置換しようとしてまちがってwomanという変化をwomaleにしてしまう可能性があるからです。
0321デフォルトの名無しさん2016/01/09(土) 20:19:58.68ID:3Mphd1W9
正規表現
単語で検索
" man "を" male "に変換
3通りの可能性思いつきました
0322デフォルトの名無しさん2016/01/09(土) 20:56:12.50ID:1IbXuGB2
>>321
文字列とかコメントとかまで考えると…
0323デフォルトの名無しさん2016/01/09(土) 22:01:41.40ID:sD5C6F8w
exportしてトークンに分解して全置換してimportし直すマクロを組むとか
VBAのエスケープやコメント処理って比較的楽な気がするし
既にそういうのありそうだけど
0324デフォルトの名無しさん2016/01/09(土) 22:02:50.59ID:h3R10OzO
そのクーポンってなんですか?
割引してくれるの?
0325デフォルトの名無しさん2016/01/09(土) 22:03:52.65ID:h3R10OzO
このExcelにもともとついてる開発エディタにそんな機能はついてないの?
0326デフォルトの名無しさん2016/01/09(土) 22:07:18.41ID:sD5C6F8w
そうVBAソースを字句解析するって意味
自分で書けば100%割引でお得だよ
03273122016/01/09(土) 22:16:44.24ID:CpCNnIMM
配列のLBoundを変更する機能はVBAでやるのはやめて、メモリを直接弄ることにしました。
お騒がせしましたがうまくいったみたいです。
0328デフォルトの名無しさん2016/01/09(土) 22:22:59.10ID:sD5C6F8w
つーかeclipseプラグインとかにVBA用のがあれば何も作らずに済むんじゃないの
探してみなよ
0329デフォルトの名無しさん2016/01/09(土) 22:29:04.87ID:1IbXuGB2
>>323
コメントが「グローバル変数や、Public Subの名前」の説明だったり、文字列を Eval( ) に渡してるとか…
変換しなきゃいいって訳でもなかったりするし
0330デフォルトの名無しさん2016/01/09(土) 22:32:15.76ID:h3R10OzO
eclipseプラグインにVBAはございますか?
なければ探してもしかたがないもんな。
Do Until 見つかる 〜 Loop の無限ループに入ってしまう。
0331デフォルトの名無しさん2016/01/09(土) 22:36:03.89ID:sD5C6F8w
>>329
コメントやEvalがあったら置換した上で警告でも出せばいいんだし
こういう場合どう処理するの?なんて本人にしか判らんこと気にしても仕方ない
0332デフォルトの名無しさん2016/01/09(土) 22:42:38.50ID:enMYG2pF
途中で仕様変更しちゃいけないというのがよく分かるな。
0333デフォルトの名無しさん2016/01/09(土) 22:43:54.04ID:sD5C6F8w
つーか適当なエディタで単語で全置換でいいんじゃないの
それで大きな問題が起きるとは思えないし
0334デフォルトの名無しさん2016/01/10(日) 00:31:35.36ID:hZikTLMs
忘れたけどvbaのプラグインでそういうのできるのあったはず。
てか、vba編集するのにeclipse立ちあげるとかキチガイにもほどがある
0335デフォルトの名無しさん2016/01/10(日) 10:18:26.27ID:MoheO9k0
つWinMerge
0336デフォルトの名無しさん2016/01/10(日) 13:09:04.97ID:2foMUWB4
>>333
> それで大きな問題が起きるとは思えないし
よほど小さなソフトしか組んだことないか、ぬるい仕事しかしたことないんだろうな…
うらやましい
0337デフォルトの名無しさん2016/01/10(日) 13:29:33.20ID:vlDN8AGa
VBAでデカいきついシステム組むのがまちがってるけどな
0338デフォルトの名無しさん2016/01/10(日) 13:34:42.61ID:AcnVMiQc
そもそも仕事の話に持ってくのがおかしいよな
0339デフォルトの名無しさん2016/01/10(日) 15:06:14.04ID:NoYOPUfs
え?おまえらVBA書くのに他のソフトで書いてるの?
普通にExcelで書くよな?背景とか文字色も一応変えられるし

ちなみにおまえらの配色構成どうしてる?俺はこんな感じの配色にしてるんだけど、目疲れに良いおすすめあったら教えて
http://uproda.2ch-library.com/913125j4t/lib913125.jpg
0340デフォルトの名無しさん2016/01/10(日) 15:21:55.12ID:VlwFWjx7
仕事じゃなけりゃVBAなんか使わねぇよ
0341デフォルトの名無しさん2016/01/10(日) 17:00:44.21ID:NoYOPUfs
むしろプライベートでしかVBA使ってない
0342デフォルトの名無しさん2016/01/10(日) 17:51:41.19ID:wKvoM5NG
おれはVBAしか使えない
他言語どころか
Excelのピボットテーブルも入力規則も使ったことが無い
それどころかワークシート関数すら覚束ない
でもVBAだけで給料もらえるから問題なし
0343デフォルトの名無しさん2016/01/10(日) 18:07:03.32ID:W+alusTR
まぁ本人がその給料で満足してるならそれでいいんじゃないだろうか。

幾ら貰ってるかは知らないけど。
0344デフォルトの名無しさん2016/01/10(日) 18:43:22.48ID:KeJgEHCD
プログラマー気取りで変なプログラミング講釈する人うざいです
0345デフォルトの名無しさん2016/01/10(日) 21:31:31.28ID:NoYOPUfs
プログラマー気取りっていうか、VBAをプログラムというと変にファビョる人いるよね
「VBAがプログラムwwあれをプログラムと呼んだら駄目っしょ笑」みたいな人たまにいる
0346デフォルトの名無しさん2016/01/10(日) 22:07:49.93ID:fKRpFEpV
まあVBAは便利だけど子供のおもちゃみたいに思われているからね
マイクロソフトは勿体ないよな
ビジネスに発展させるには素人にスゲーと思わせてナンボなのに、
新卒の研修にちょっくら使わせてみるかみたいなイメージになってしまっている
0347デフォルトの名無しさん2016/01/10(日) 22:08:12.25ID:xRSSZTjv
>>342
Excelは入出力のインタフェースに過ぎないっていう使い方かな?

>>345
一種のコンプレックスのあらわれなんだろうか。
VBAは言語としてダメな点は多いけどね。
0348デフォルトの名無しさん2016/01/10(日) 22:55:42.57ID:agiL7Ile
For Application ってだけあって付属言語だからね
エクセルがあればすごいんです(キリ って感じ?

OS上で直接動く言語から見たら頭ポンポンしたくなるだろ
0349デフォルトの名無しさん2016/01/10(日) 23:08:46.92ID:+vbjBZah
Excelの企業シェアにあぐらをかいてる言語だという認識は間違っていないと思う
0350デフォルトの名無しさん2016/01/10(日) 23:12:22.88ID:+vbjBZah
ExcelはVBAも含めて基本PC1台で使うもの その点を忘れてはいけない
0351デフォルトの名無しさん2016/01/10(日) 23:32:51.77ID:nfQKqPqr
>>350
>>344
0352デフォルトの名無しさん2016/01/11(月) 01:59:22.45ID:AWAF7CGx
目下の疑念はOS上で動くものを「直接」と表現していいのかどうかという事だ
0353デフォルトの名無しさん2016/01/11(月) 07:21:46.06ID:gsKg8O84
VBAのダメ出ししてる人ってIDispatch経由で動かした場合どういう反応になるんだ
出来ること全く変わらんのだが
0354初心者A2016/01/11(月) 08:26:22.84ID:HLjXNd8w
'ワークシートの存在確認、削除、追加をするプログラム
Option Explicit
Const sheet3name = プロット(■前後のダブルクオテーション略!)

Sub Macro1()
Dim ws As Worksheet
Dim chart1 As Worksheet

Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name = sheet3name Then
If Worksheets.Count > 1 Then
ws.Delete
Else
GoTo Label1
End If
End If
Next
Application.DisplayAlerts = True

Set chart1 = Worksheets.Add
ActiveSheet.Name = sheet3name

Label1:
End Sub
0355初心者A2016/01/11(月) 08:28:53.39ID:HLjXNd8w
ワークシートの存在確認、削除、追加をするプログラム
を作りました。
http://ww10.puny.jp/uploader/download/1452467710.zip
パスワード:abc

■やりたいこと
ワークシートの存在確認、削除、追加をするプログラムを
グラフシートの存在確認、削除、追加をするプログラムに修正したい。
For〜Nextの部分をどう、修正したらいいか、ご教授お願い致します。

修正前(ワークシート)
Dim ws As Worksheet
Dim chart1 As Worksheet
Set chart1 = Worksheets.Add
ActiveSheet.Name = sheet3name
修正後(グラフシート)
Dim ws As Chart
Dim chart1 As Chart
Set chart1 = Charts.Add
ActiveChart.Name = sheet3name 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0356初心者A2016/01/11(月) 10:13:11.60ID:HLjXNd8w
難しく考えすぎました。自己解決しました。

'グラフシートの存在確認、削除、追加をするプログラム
Option Explicit
Const sheet3name = プロット(■前後のダブルクオテーション略!)

Sub Macro1()
Dim ws As Chart
Dim chart1 As Chart

Application.DisplayAlerts = False
For Each ws In Charts
If ws.Name = sheet3name Then
ws.Delete
End If
Next
Application.DisplayAlerts = True

Set chart1 = Charts.Add
ActiveChart.Name = sheet3name
End Sub
0357デフォルトの名無しさん2016/01/11(月) 11:19:37.13ID:eiYfk44d
>>353
素のままのVBAじゃなくて、そういう弄らなきゃいけないところをマイナスポイントにするかどうかで変わってくるな。
むしろプラスポイントと見なす人もいるかも知れんが。
自分は不満点いろいろある。
0358デフォルトの名無しさん2016/01/11(月) 14:09:09.67ID:np4MR6nO
質問お願いいたします。
ノートPCを閉じてスリープ状態になってしまってもvbaプログラムが止まらないようにする方法はありますか。移動や別の仕事で常にPCを開いとくことができません。よろしくお願いします。
0359デフォルトの名無しさん2016/01/11(月) 14:11:54.26ID:6idxIuPk
これってなに?最強の開発環境くるの?
http://blogs.msdn.com/b/ayatokura/archive/2016/01/09/ga.aspx
0360デフォルトの名無しさん2016/01/11(月) 14:32:56.61ID:grtS6L7L
>>359
そんな過去ネタを今更。
ハッキリ言って糞。使いたいとも思わない。
0361デフォルトの名無しさん2016/01/11(月) 14:38:18.74ID:qDZy1U6Z
>>358
スリープって眠るってことだよ
閉じても眠らない設定にしなさい画面だけ消すとか
0362デフォルトの名無しさん2016/01/11(月) 14:49:09.64ID:db4WHs28
エクセル2016からリレーションシップ機能追加ってマジですか?
0363デフォルトの名無しさん2016/01/11(月) 15:21:48.39ID:Fkm8B5dx
>>358
電源オプション→カバーを閉じたときの動作の選択→バッテリー駆動/カバーを閉じた時の動作を「何もしない」に設定すれば
パソコンを閉じてもプログラムは動き続ける
0364デフォルトの名無しさん2016/01/11(月) 15:43:06.72ID:grtS6L7L
>>362
元々、MSQUERYではやれていたが、実に古臭いUIと仕組みだったからねぇ。
どうなることやら。Accessを殺しに来るのかどうかが注目だがね。
0365デフォルトの名無しさん2016/01/11(月) 16:02:56.77ID:Fkm8B5dx
自社製品を殺してどうする
0366デフォルトの名無しさん2016/01/11(月) 16:17:41.70ID:grtS6L7L
>>365
そもそも、前からAccessについてはその存在について、実際に無くすっていう議論は
出てるんだよ。ユーザの間でも有名な話だぞ。2013が出た時はホッとしたがあの直前
当たり、下手するとそろそろAccessはユーザ数も減ってきており、Excelに統合されて
消えるんじゃないかってね。

この手のアプリってAccessしか実質的に存在しないし、Excelよりもとっつきにくいという
こともあってね。既にテーブル機能は実装されているし、ここにクエリーが本格的に実装
となると、Accessのポジションは危うくなる。
■ このスレッドは過去ログ倉庫に格納されています