No.1
- 回答日時:
どうも、TAGOSAKU7です。
ピクチャボックスも通してはダメなのですか?
出題者は『コピー&ペーストで取り込んだ画像はダメ』と言ったわけではないのですか?
それとも、『メモリ上に存在する「絵」をビットマップとして作成』という限定仕様なのですか?
情報をください
1.エクセルのバージョン
2.グラフはワークシートに、グラフオブジェクトとして存在?それとも、ひとつのグラフシートとして存在?
3.グラフを作成するときデータをエクセルに書き出しますよね?そのときは非表示?もし非表示なら、表示しても可ですか?
現在長期出張中で、VB環境が無いためにほとんどレスが書けない状況です。
調べてみないとすぐには僕もできません。それに今はC言語環境しかないのです。2日後以降であればVB環境を入手できます。期限に間に合いますか?
この回答への補足
まずExcelは2000です。で、グラフはグラフオブジェクトとして存在(んー、理解の不一致がなければいいんけど、、。)グラフ1とかいう感じでデータを書き込んだシートと同じところに存在しています。でもシート(?シートの下についているタグのように)として存在するぶんには構いません。あくまでExcelシートは影の存在なので、どんな状態でも可です。でも表示するのは不可なんです。裏で全てを処理して保存したいのです。出張中というのに回答していただいてありがたい限りです。どこに出張してるんですか?
補足日時:2001/12/04 17:50No.3
- 回答日時:
まず最初に
http://oshiete1.goo.ne.jp/kotaeru.php3?q=154890
で発言したARCさんに感謝です。VB環境を臨時で入手できました。
#2の発言はまだ見てないようですが・・・
とりあえず処理が見えなければOKかな?っと勝手に思って、クリップボードを使用してます。(クリップボード使用は不本意)
処理の流れの詳細としては、まず・・・
エクセルにデータを出力(勝手にグラフに反映)
エクセルの保存
・・・で次のような処理を行ってください。
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.ChartArea.Select
ActiveChart.ChartArea.Copy
要するに、グラフオブジェクトをクリップボードにコピーする処理です。
そして、エクセルを閉じてください。(閉じるときの保存不要)
ここからが本題で、
ダミーのピクチャボックスに画像を読み込む
保存する
以上です。
もしこれ以外の方法であれば、かなり実験/検証が必要です。
CreateFile関数でBitMapファイルそのものを作成していかなければなりません。かなりのチカラ作業となります。BITMAPのヘッダやパレットを直接指定して、幅*高の分だけの各ドットを、手作業でセットする処理になると思います。
もし締め切りが近いのであれば、とりあえず下記のコードを参考に作成して、それでもダメならば先生からヒントを得てください。大学のVBの課題で、そこまでの要求をする先生はあまりいないと思います。Cでグラフィック大好き先生ならわかりませんが・・・
ピクチャボックスもダメなときのために、一応参考URLを載せておきます。
http://www.alpha-net.ne.jp/users2/ei9711/oldkouz …
Option Explicit
Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" (ByVal wFormat As Long) As Long
Private Const CF_METAFILEPICT = 3
Private Sub Command1_Click()
'ファイルパスを指定して保存する
Call SavePic_FROM_Clipbord("c:\test.bmp")
End Sub
Private Sub Form_Load()
'ダミーピクチャボックスの書式設定
With Me.Picture1
.Appearance = 0
.AutoRedraw = True
.AutoSize = True
.BorderStyle = 0
.Visible = False
End With
End Sub
'クリップボードからの画像の取り込み&保存
Private Sub SavePic_FROM_Clipbord(inPictureFilePath As String)
'画像形式であることをチェック
If IsClipboardFormatAvailable(CF_METAFILEPICT) = 0 Then
MsgBox "画像を取り込めません"
GoTo PGMEND
End If
With Me.Picture1
'画像の取り込み
Set .Picture = Clipboard.GetData()
'画像の保存
Call SavePicture(.Image, inPictureFilePath)
End With
PGMEND:
End Sub
参考URL:http://www.microsoft.com/JAPAN/developer/library …
No.4
- 回答日時:
>回答を何度も頂いて失礼極まりないですね、、。
気を付けます。(・_・三・_・) ウウン
そんなことはありません。
チャットではないので、タイミングが合わなければよくあることです。
がんばってくださいな。
この回答への補足
完成品を見せたら「もうチョット早いといいなッ」って返されました。もう、どこまで私に求めるのって感じなんです。しかも期限は明日までなんて、、。私もまた求めてしまいますけど、高速化という点について分かりますか?DBに接続しているんでADOを使っています。そこがやっぱりタイムログ(使い方は合ってる?)なんだと思うんですよね、、。
補足日時:2001/12/06 15:22No.5
- 回答日時:
ADOの部分で時間がかかるということですか?
コードを見てみないと、どこが無駄かがわかりませんが、、、
想像の中を逸しませんが、一番負荷がかかる部分はエクセルの起動と、データの出力部分ではないでしょうか?
1.エクセルの起動に関して
#3の発言において、
>そして、エクセルを閉じてください。(閉じるときの保存不要)
とありますが、閉じなくてもOKです。あらかじめプログラム起動時にエクセルを裏で起動しておき、プログラム終了時に閉じると、実行中の負荷を多少おさえることができると思います。[グラフを描画]のタイミングでエクセル起動/終了を繰り返すと、その分だけ遅くなります。
2.データの出力部分
データを
Cells(1,1).Value=1
Cells(1,2).Value=2
とエクセルに各値セットしているのであれば、改善しましょう。
まず宣言
Dim 配列変数() as String
Dim lngDataCnt as Long
データ件数を取得
lngDataCnt = データのカウント
配列の大きさをセットして再宣言
Redim 配列変数(lngDataCnt,データのフィールド数) as String
ループでまわすなどして、配列変数にデータをセット
配列変数(i,j)="各データ値"
セルに出力範囲を指定して出力
Range(Cells(1,1),Cells(1,2)).Value=配列変数
といったように、出力は一度で済ませましょう。
あとまったく未検証なのですが・・・
Dim exlApp as Excel.Application
と言う感じで、エクセルアプリケーションを操作するために宣言を行っているとは思いますが、エクセルは常に非表示ですよね?
それでも、もしかしてデータの出力中は
exlApp.Screen.Updating = False
として、グラフをコピーするタイミングで
exlApp.Screen.Updating = True
としてあげると、早くなるかもしれません。
最後の一文は「たぶん」ですので、何にもならなかったら無視してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- その他(Microsoft Office) OneDrive Personalについて 1 2022/08/02 18:25
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) Excel使用前提 同じフォルダ内にあるファイルの集約等をマクロでできますか 4 2022/09/06 19:03
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- iOS iPhone用動画保存アプリiCapのデータは外付けUSBメモリに保存できますか? 1 2022/10/18 17:48
- PowerPoint(パワーポイント) ExcelのグラフをPowerPointに貼り付けした際にデータテーブルの小数点以下を削除したいです 2 2023/02/28 19:46
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
富士通(汎用機)のAIMについて
-
「Nullの使い方が不正です」の...
-
VBAでアクセスDBからデータの取...
-
VBAコンボボックスの内容が反映...
-
ActiveReportでデータが0件の場...
-
【C#】textBoxの指定行のデータ...
-
COBOL数値転記の仕様
-
MSFlexGrid 行選択状態
-
事務処理ソフトの開発に使用す...
-
AccessVBAでのExcelメモリ解放
-
VBAでメモ帳からの文字列を所定...
-
矩形グラフ(オシロやロジアナ...
-
クリスタルレポートでレコード...
-
access vba 『○○件づつ表示』を...
-
VBA 変数名に変数を使用したい。
-
【VB】コンボボックスにデータ...
-
Accessで別mdbのテーブルをコピー
-
vba フィルター 複数条件 3つ以...
-
VBとアクセスでSQL文に変...
-
Accessのフィールド名に半角括...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLでデータとして画像を指定す...
-
【C#】textBoxの指定行のデータ...
-
VBAでアクセスDBからデータの取...
-
Excel VBAでフォルダ内の全テキ...
-
【VB.NET】Excelの最終行までの...
-
C# DataTableに最後に追加した...
-
「Nullの使い方が不正です」の...
-
VBAコンボボックスの内容が反映...
-
COBOL数値転記の仕様
-
クリスタルレポートでレコード...
-
VB2010で、選択した系列を最前...
-
アクセスでウェブ上のデータを...
-
Excel VBAで1週間毎にカテゴリ...
-
非同期のプロセス間通信(パイプ...
-
エクセルのセル最終行取得
-
ActiveReportのdetailをデータ...
-
富士通(汎用機)のAIMについて
-
Excel VBAでグループ毎に集計す...
-
エクセルのCSV読み込みについて
-
AccessVBAでのExcelメモリ解放
おすすめ情報