Excel VBA 質問スレ P ..
839:デフォルトの名無しさん
10/03/25 18:07:16
継承が使えればformを継承し新しいクラスを作る
もしくはshow関数をオーバーロード
もしくはグローバル関数を使う
もしくはテキトーなtextboxに値でもいれておき、それを参照するようにする
下に行くほど簡単。どれでも好きなものを
840:デフォルトの名無しさん
10/03/25 18:16:40
excel2007で質問させてください。
各シートから条件に一致したデータを抽出して印刷しようとしています。
印刷ひな形となるシートのコピーを作成して
そのコピーしたシートにデータを書き込んで印刷→シート削除という流れなのですが
worksheets(hoge).copyを使用すると
Application.ScreenUpdating = falseにしていても
画面遷移が起こってしまいます。
画面遷移なしで処理したいのですが何か他に方法はありますか?
ひな形シートの全セル選択で貼り付けると印刷設定が移動できませんし
印刷設定のプロパティも全部コピーしていくしか無いのでしょうか
841:デフォルトの名無しさん
10/03/26 02:13:27
ちょっとVBAに慣れると調子に乗って
ExcelベースのGUIで便利なアプリにしてやろうなんて
夢想しがちだが、肝心な機能の呼び出しが非公開だったり
することが多くて失敗しやすいね
842:デフォルトの名無しさん
10/03/26 05:24:58
>>840
印刷設定のコピー方法はプリンターの機種ごとに違ってて、そう簡単にはコピーできなかったと思う
843:デフォルトの名無しさん
10/03/26 09:41:04
←→
┌───┐┌───┐
└───┘└───┘
上のような感じで複数のセルの中から値の入力されてるセルの上端に双方向矢印を入力させるというマクロを作りたいのですが
可能でしょうか?双方向矢印を引くだけならマクロの記録を使ってできるのですが値のあるセルだけにという条件をくわえるにはどうしたらいいでしょうか?
どなたか教えてください。
844:デフォルトの名無しさん
10/03/26 13:18:35
>>843
こんな漢字?
Sub a()
Set d = UsedRange
For Each s In d
If s.Value <> "" Then
s.Offset(-1, 0).Value = "←→"
End If
Next
End Sub
845:デフォルトの名無しさん
10/03/26 13:58:50
>>844
うまく説明できてなくてすみません。。
例えばA1からD9までの範囲があったとしてそこの中のセルに値があるものだけを検索して
図形の双方向矢印をセルの上端の線に合わせて入れたいんですが可能でしょうか?
846:デフォルトの名無しさん
10/03/26 17:26:23
>>839
グローバル関数でいけました。ありがとうございました
847:デフォルトの名無しさん
10/03/26 21:14:29
>>843
やりたいのはこんな感じ カナ?カナ?
Dim Sh As Worksheet
Dim r As Range
Dim X1 As Integer
Dim X2 As Integer
Dim Y1 As Integer
Dim Y2 As Integer
Set Sh = ActiveSheet
For Each r In Sh.Range("A1:D9")
If r.Value <> "" Then
With r
X1 = .Left
Y1 = .Top
X2 = X1 + .Width
Y2 = Y1
End With
With Sh.Shapes.AddLine(X1, Y1, X2, Y2).Line
.BeginArrowheadStyle = msoArrowheadTriangle
.EndArrowheadStyle = msoArrowheadTriangle
End With
End If
Next
848:デフォルトの名無しさん
10/03/26 22:49:43
>>847
ありがとうございます!!まさにそのとおりです。
ちなみに矢印を上端の中心に持ってきて左右の長さを縮めたいのですが・・・
←→ .←──→
┌───┐┌───┐
└───┘└───┘
今のままでは右のようになるので左の図のようにしたいと考えてまして
そういった方法の指定も可能ですか?
849:847
10/03/26 23:18:03
>>848
可能
Rangeオブジェクトのプロパティ
Left Top Width Height
後はヘルプを見るなりして がんばってみてね
850:デフォルトの名無しさん
10/03/26 23:27:15
色んなことをやりたい人がいるんだな
851:デフォルトの名無しさん
10/03/26 23:35:17
このスレはVBAとPerl14
のスレなのになぜPerlネタが一切でてこないんだ?
852:デフォルトの名無しさん
10/03/26 23:49:26
次の質問どうぞ
853:847
10/03/27 19:33:47
>>843
もう見てないかもしれないけれど
>>847のコードは
型宣言を 勘違いしてたみたい
変数 X1 X2 Y1 Y2 は Single型もしくはLong型で宣言するべきだった
Integer型だと少数点以下がカットされるので線が少しずれてる
さっきヘルプを見ていて気づいた
ゴメンね
854:デフォルトの名無しさん
10/03/28 03:21:33
シェイプ関連の位置指定は、ポイント単位だからなあ。
て、Longも駄目だろw
855:847
10/03/28 10:55:03
>>854
がーーーん
またまたすみません
たっ たしかにそうでした
回答者に向いてないかも俺
さすがに落ち込みました
856:デフォルトの名無しさん
10/03/28 11:02:37
ドンマイ。よくあることだw
857:デフォルトの名無しさん
10/03/28 21:05:10
質問です。
CSVファイルをエクセルブック内のワークシートに貼り付けするとき、
Workbooks.Open Filename:=csvfile
Workbooks(csvfile).Worksheets.Copy after:=Workbooks(mybook).Worksheets("ファイル一覧")
Workbooks(csvfile).Close
こんな感じで簡単に貼り付けています。
csvファイルが5MBとかサイズが大きくても上のようなやり方で問題ないでしょうか。
csvファイルの先頭から1レコードずつ取得して貼り付けるという方法もネットから探し出せたんですが
どっちがいいのか判断しにくいです。
858:デフォルトの名無しさん
10/03/28 21:07:57
ExcelVBA開発がメインの人っているの?
趣味とか、基本的にはVBとか、やけにできる事務員とか、そんな感じですか?
859:デフォルトの名無しさん
10/03/28 21:21:12
自称やけにできる事務員ですw
860:デフォルトの名無しさん
10/03/28 21:35:38
英単語が並べられている列があり、隣の列に意味を書き出す、というのを作っています。
使用する英語の辞書のURLはURLリンク(www.alc.co.jp)です。
「apple」という単語を検索するとURLは
URLリンク(eow.alc.co.jp)
となります。
ここで、英単語を検索した結果表示されたページから該当箇所を抜き出すというやり方が分かりません。
上記の「apple」の場合、「・apple」から「分節ap・ple」まで抜き出したいのです。
やり方がわかる方教えてください。
861:デフォルトの名無しさん
10/03/28 22:09:20
>>860
* データの転載は禁じられています。
class="midashi"
862:デフォルトの名無しさん
10/03/28 22:25:22
>>857
5MBのCSVなんて動作遅くならないか?
速さをなんとかしたいならsqlでやる。
863:デフォルトの名無しさん
10/03/29 00:28:17
>>860
VBA上から Webページのデータを取得するのは
そのWebページのソースを見て理解できないと無理
(そしてそれをどうVBA上からコントロールするかも)
ソースをみたけど
<DIV class=mr_10 id=resultList ondblclick=seow()>
ってのがあるから
id=resultList ←これを利用すれば
「・apple」から「《コ》アップル・メニュー」
までは抜き出せるね
あとはタグを辿っていくしかないかな
864:デフォルトの名無しさん
10/03/29 13:57:45
>>858
やけにできる事務員だった
データの正規化やコピーする際に絶対にミスしないのが魅力的
速度自体は大して変わらん
865:デフォルトの名無しさん
10/03/30 10:59:35
1ブック内に複数あるシート全てを選択した状態で、且つ一シート目にのみ開始ページ番号が振られている状態で
印刷したときに割り振られるページ数を、印刷せずにマクロで調べたいのですがどのような方法があるでしょうか?
このシートのこのセルは何ページ目に該当する、ということを調べて行きたいです。
プレビューで見ていけば可能ですがページ数が膨大なのでマクロで処理したいと思っています。
866:865
10/03/30 11:02:54
すいません、バージョンは2000です。
867:デフォルトの名無しさん
10/03/30 13:47:33
>>865
『このシートのこのセル』はそもそもどうやって特定するの?
1シートで印刷するのは複数頁あるってこと?
868:865
10/03/30 16:43:41
>『このシートのこのセル』はそもそもどうやって特定するの?
全シート走査で特定単語を置換していくので、
その置換処理が行われたときのセルを元に出力時のページをその都度
調べてワークファイルに書き出したいと思っています。
(置換処理、書き出す処理はできてます)
>1シートで印刷するのは複数頁あるってこと?
そうです。
1シートに1頁の場合と複数頁ある場合とがあります。
869:デフォルトの名無しさん
10/03/30 20:18:53
特定単語を置換する前に
検索→セル番地取得→セル番地から頁数割り出し
という作業をかませばいいんでないの?
870:865
10/03/30 21:13:16
>>869
「セル番地から頁数割り出し」の部分がわからないんです…
871:デフォルトの名無しさん
10/03/30 21:41:45
一度、印刷プレビューで1頁で何セル印字するのか調べてみたら
872:デフォルトの名無しさん
10/03/30 22:13:52
使った事ないけど
VPageBreak オブジェクト
HPageBreak オブジェクト
なんかどう?
873:872
10/03/30 23:30:03
ちょっとテストしてみたけど 頁数割り出しの参考にならないかな
Sub test()
Debug.Print "改ページ数:"; ActiveSheet.HPageBreaks.Count
For Each a In ActiveSheet.HPageBreaks
Debug.Print "改ページ 行位置:"; a.Location.Row
Next
End Sub
874:デフォルトの名無しさん
10/04/02 07:24:45
Application.OnTimeでサブルーチンを時間起動したいのですが、
セルをダブルクリックして値入力状態であったり、モーダルで
バルーンを表示させていたりすると、Application.OnTimeに制御
が移らず、サブルーチンを起動できません。
これを回避する知恵をお持ちの方、ご教示願います。
875:デフォルトの名無しさん
10/04/02 16:52:52
回避するって
>セルをダブルクリックして値入力状態であったり、モーダルで
>バルーンを表示させていたりすると、
はどうするねん
別にexcel.applicationを起こしてそっちでontimeさせればええやん
876:デフォルトの名無しさん
10/04/04 19:32:11
XPsp2,EXCEL2003です。
ピボットテーブルをVBAで作成しているのですが、
データによって(件数?)、集計の仕方が、
「個数/金額」になったり、「合計/金額」になったりします。
常に「合計/金額」になるようにするには、どうすれば良いのでしょうか?
コードは次の通りです。
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"ZZZWORK!R5C" & c_yymm_p & ":R" & lastrow & "C" & c_io_p).CreatePivotTable TableDestination:="", TableName:= _
"ピボットテーブル4", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("ピボットテーブル4").ColumnGrand = False
ActiveSheet.PivotTables("ピボットテーブル4").AddFields RowFields:=Array("分類", "科目") _
, ColumnFields:="年月"
ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Orientation = _
xlDataField
Application.CommandBars("PivotTable").Visible = False
ActiveWorkbook.ShowPivotTableFieldList = False
よろしくお願いします。
877:デフォルトの名無しさん
10/04/05 02:29:05
>>876
ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Function = xlSum
878:876
10/04/05 08:04:46
>>877
レスありがとうございます。
そのコードを追加したら、
実行時エラー'1004':
PivotFieldクラスのFunctionプロパティを設定できません。
になりました。どうすれば良いのでしょうか?
追加した位置は、下記のステートメントの次です。
ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Orientation = _
xlDataField
よろしくお願いします。
879:デフォルトの名無しさん
10/04/05 12:28:18
>>878
フィールド名の「金額」の部分を自分の作ったテーブルに合わせて書き換える
テーブルの一番左上の灰色のセルの値を見る
880:878=876
10/04/05 17:07:07
>>879
レスありがとうございます。
常に合計になるようにできましたm(_ _)m
881:デフォルトの名無しさん
10/04/05 18:37:42
サブメニューを複数個作りましたが、
どのサブメニューを選択しても、同じSubプロシージャを呼び出したいです。
Subプロシージャ側で、どのサブメニューが選択されたかを知るにはどうすればいいでしょうか?
パラメーターとか使えますか?
参考になるサイトがありましたら紹介していただけませんか。
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4345日前に更新/253 KB
担当:undef