• 締切済み

VBにて指定した通りにExcelの列幅が設定されません..

こんにちは。 VBにて指定した通りにExcelの列幅が設定されず、困っております。 【現象】 VisualBasicから、Excelを起動し新規ブックを生成し、 ワークシートを指定して全列幅を「1.75ポイント」で 設定したいのですが、どうしても 列幅が「1.83ポイント」で設定されてしまいます。 VB側ソースでは、次のように書いております。 ワークシート(Index).Cells.ColumnWidth = 1.75 VB側で指定した列幅がExcel側で不都合というケースはあるのでしょうか..。 VB側で列幅を指定したにも拘らず、 Excel側で勝手に列幅を調整してしまう事はあるのでしょうか..? 【実行環境】 ・Visual Basic 6.0 ・Excel Ver2002 かなり急いでおります。 お忙しい中、恐縮ではございますが、 何かご存知の方、アドバイス等、頂戴できますと幸いです。  

みんなの回答

  • yamav102
  • ベストアンサー率100% (3/3)
回答No.5

こちら参考にはなるかと。 「ColumnWidth は設定どおり設定されるわけではない件」 http://yamav102.cocolog-nifty.com/blog/2012/07/columnwidth-9c8.html

参考URL:
http://yamav102.cocolog-nifty.com/blog/2012/07/columnwidth-9c8.html
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。Wendy02です。 >現行仕様が、列幅を指定して改頁位置を決めているのです。 >その為、列幅が既存と同じく「1.75」になりませんと改頁位置がずれ、見た目が大きく変わってしまいます。 (自動)改ページの位置は、行数に対してであって、列幅とは、直接関係ないはずです。 分かりきっている話だとは思いますが、自動改ページ位置は、物理的行数の限界があるものの、上下のマージン+ヘッダー・フッターで、決定されます。印刷幅に関しては、マージンで処理します。右側は論理位置で、左側が物理位置です。 だから、自動改ページ位置のズレは、左のマージンであわせるというのが一般的です。左マージンを狭くするしかありません。(手動改ページについては、ここでは触れていません。) 右は、ある程度しかできません。位置が狂うのは、おそらくギリギリの限界にあわせているのだろうと思います。ある程度の余裕をみていないと、ちょっとしたことで、位置が狂ってしまうわけです。 それから、現在、Excelと、プリンタへの印刷できるようになっているプリンタへの出力なら可能なのですが、手元にないものですと、経験的にかなり難しいです。もし、そうなら、VB側から、試し刷りさせて、設定を調整させるようにしないと、無理かもしれませんね。 それと、今まで、私の試した結果ですと、フォント・サイズが、10~12ですと、だいたいデフォルト幅の設定に収まりますが、それ以外ですとズレるようです。(高さは別です。だから、必ずしも、規定の改行位置には収まらないこともあります。) ただし、私が試しているのは、MS ゴシックです。プロポーショナルでは試したことはありません。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。 原因は他の方が回答されているので、提案です。 あなたが環境設定した Excel ファイルをテンプレートとして、Exe と同一 のフォルダまたはサブフォルダ等に用意し、出力時にはそのファイルをコピー して開き、データを書き込みます。 この仕様であれば、列幅等々や罫線、フォントなどの環境設定を VB 側から 行う必要はありません。VB ではデータを流し込みことしかしません。あるいは 最小限で済ませます。 予めセル幅 1.75 に設定したものを開くので、異なる PC 環境の影響を受け 難いと思いますが...どうでしょう? VB 側のコード量も減らせます。結果、時間がかかる環境設定等の処理を省略 できる分、Exe の出力処理の実行速度向上も期待できるかも?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 確認しました。 それは、Excelのスタイルで指定しているデフォルト・フォントのサイズとのバランスの問題だから、1.83pt が、1.75pt に設定させるというのは、出来る場合と、そうでない場合があります。デフォルト・フォントのサイズを換えれば、できるようになるはずです。 こちらが試したものでは、デフォルト・フォントのサイズが9 にして試すと、1.83(16 pixel)  に丸められます。 実際、ピクセルに対するポイントであって、ピクセル単位にしか、列幅は動かないはずです。だから、その設定が出来ない場合は、そのフォントのサイズに関しては、列幅のポイントは、それ以上は出来ません。また、それでExcelに実質的な不都合はないはずですし、ワークシートのセルのサイズは、あまり厳密なものがありません。

maryanne39
質問者

補足

ご丁寧なご回答を有難うございます。 補足させていただきますと、 既存の「VBからExcel出力する」システムへ手を加えています。 現行仕様が、列幅を指定して改頁位置を決めているのです。 (一部の列は更に別の幅で指定し直して調整しています。) その為、列幅が既存と同じく「1.75」になりませんと 改頁位置がずれ、見た目が大きく変わってしまいます。 そうなると、基本設計(概要設計)から見直す必要も出かねず、 どうしたものか..。 不思議なのは、 現行システムでの実行結果(列幅1.75)よりも デバッグ結果(列幅1.83)のほうが横幅が狭く見えるんです。  

回答No.1

再現できません。とりあえずメモだけ。 http://support.microsoft.com/kb/214123 http://hp.vector.co.jp/authors/VA016119/sizemmqa.html#columnwidth http://msdn2.microsoft.com/ja-jp/library/microsoft.office.interop.excel.range.columnwidth(VS.80).aspx ColumnWidthは標準フォントでの【文字数】。プロポーショナルフォントの場合「0」という文字の横幅が1文字の基準。 http://msdn2.microsoft.com/ja-jp/library/microsoft.office.interop.excel.range.width(VS.80).aspx Widthはポイント数を知ることが出来るが、ReadOnlyなので値を代入できない。 >ピクセル単位に丸められるようです。1 ピクセルよりも細かく微調整することができません。 正確には8ピクセル単位。

maryanne39
質問者

お礼

ご回答いただき、有難うございます。 単位について、ポイントではなく「ピクセル」でした. . 。 大変失礼致しました。 貼り付けて下さったサイトはとても参考になりました。 お礼を申し上げます。

maryanne39
質問者

補足

度々すみません。。 「ピクセル」ではありません。 訂正をさせていただけますでしょうか。

関連するQ&A

  • 【VB6】EXCELのセルに0.033を"3.3%"と自動で表示指定入力したい

    お世話になっております。 VB6(visual basic 6)プログラムからEXCELのセルの表示形式をパーセンテージ指定したいです。 EXCEL:EXCEL 2000 OS: win XP 以下にターゲットの中核部分を切り出しました。 --- Dim oApp As Object Set oApp = CreateObject("Excel.Application") oApp.Workbooks.Add oApp.Cells(1, 1) = 1000 oApp.Cells(1, 2) = 33 oApp.Cells(1, 3) = "=a2/a1" --- EXCELのシートに 1000 33 0.033 と入力されます。 この記述ではセルがデフォルト表示のまま(0.033)です。 この0.033を自動的に3.3%と表示したいです さらには小数点以下桁数の指定方法が知りたいです。 (例えば3.300%などど表示させたり) EXCELのシートから手作業による表示形式変更方法は承知しております。 VB6からプログラムで自動に3.3%と出るようにしたいのです。 どうぞよろしくお願いいたします。

  • エクセルのブックを開く度にシートの列幅を指定したいのですが・・・

    稚拙な質問お許しください。 エクセルでブックを開いたときに、すでにシートの列幅が任意の幅になっているよう、VBAで「ThisWorkbook」というところに、 Private Sub Workbook_Open() Sheet1.Columns("a:a").Select Selection.ColumnWidth = 7 Sheet1.Columns("b:b").Select Selection.ColumnWidth = 8 Sheet1.Columns("c:c").Select Selection.ColumnWidth = 10 Sheet1.Columns("e:e").Select end sub といった感じで記述したのですが、「F8」キーで処理の過程をみながら追っていくとどうしても、Eの列を過ぎるとEの列だけでなくそれ以降の列も選択してしまい(シート上に表があるのですが、その表の1番最後の列までです。)、任意の幅に指定できないのですが、原因がよくわかりません。どなたか、お力添えください。

  • Excel97の列幅について

    知り合いに聞かれたのですが、Excel97で表を作ってA列のみ列幅を変更したら全体の列幅がA列と同じ幅になってしまったそうです。選択している列はA列のみらしいのですが、Excel97を使用したことがないのでわかりません。 Excel97にはそのような設定があるのでしょうか?

  • Excelのマクロで、一列おきに列幅を変えたい

    Excel2003です。 ワークシート全体の列幅を一列おきに同じ幅に設定するマクロを(例えばB、D、F、H…IVを10ピクセル)作りたいのですが、どうすれば良いでしょうか? よろしくお願いします。

  • Excel 列幅の違うデータのコピーと貼り付け

    いつもお世話になっております。 EXCEL 2003をしようしております。 ワークシートが二つあります。 (1)自由形式(列幅、高さ)で作成したデータ。 (2)固定の大きさ指定  列幅高さを変更しなければそのシート内  形式自由。 (2)に(1)を貼り付ける方法はどういうものが  あるでしょうか? 数字と文字列混在ですが、すべて文字列として 扱っております。 うまく伝えられずにすみません。。 どういうこと?などでもいいので よろしくお願いいたします。

  • 【VB6】EXCELのシート名を変更したい

    お世話になっております。 VB6(visual basic 6)プログラムからEXCELのシート名を指定したいです。 EXCEL:EXCEL 2000 OS: win XP 以下の記述ではシート名がデフォルトのままです。 (sheet1のままで変更できていない) Dim fs As Object Dim oApp As Object Set oApp = CreateObject("Excel.Application")'EXCEL起動 oApp.Visible = True oApp.UserControl = True oApp.Workbooks.Add '新規のワークシートsheet1を追加する oApp.Cells(1, 1) = "シート名を指定したい!" 'セル入力はできた oApp.Sheets("sheet").select oApp.Sheets("sheet").Name = "新シート名" ご覧のように (1)自動EXCEL起動して (2)セル1,1に文字入力して (3)シート名を指定 しようとしております。 セル(1,1)に「シート名を指定したい!」は入力されております。 ブック名(ファイル名)はデフォルトのBook1.xlsです。 シート名の指定方法が間違っているからうまくいかないと思っております。 どうぞよろしくお願いいたします。

  • エクセルとVB6

    環境は OS XP Visual Basic 6 Excel 2003 です。 エクセルを扱うについては、今回初めてです。 ソースです----------------------------------- Dim ex As Object ' Excel.Application Dim wb As Object ' Excel.Workbook Dim ws As Object ' Excel.Worksheet Set ex = CreateObject("Excel.Application") ex.Visible = True 'エクセルを表示する Set wb = ex.Workbooks.Add '空白の新しいブックを追加 Set ws = wb.Worksheets.Add '新しいシートを追加 ws.Name = "XXX " 'シートの名前を設定 'シートのセルに書き込む '構文:Cells(行, 列).Value = 値 ws.Cells(1, 1).Value = "ID" ws.Cells(1, 2).Value = "PS" III% = 2 For x% = 0 To 135 III% = III% + 1 ws.Cells(1, III%).Value = 問D$(x%, 0) Next x% ----------------------------------- エクセルが起動し、挿入されます。 質問1 シート XXXはsheet3としてに挿入され、それ以外にsheet1 sheet2もできています。 これはなぜですか。 質問2 sheet1 sheet2を生成しないようにできますか。 できないようにするには、どうすればいいですか。 全くエクセルは詳しくありません。 お詳しい方、よろしくお願いします。

  • エクセル 上下で列幅を変えるには

     エクセルで同じシート内の上下で違う表を作る場合に、上の表の列の幅と下の表の列の幅を別々に設定したい場合はどうすればいいですか。上の列幅を変えるとシート下の表の同じ列の幅も一緒に変わってしまいますよね。これを例えば下の表の列幅が上の列幅の変化に影響されない様にしたいんですが、これは無理ですか?やっぱり別のシートに作るしかないのでしょうか?

  • VBからEXCELで印刷するときにユーザー設定用紙を設定したい

    こんにちわ。 VBからEXCELにデータを書き込み、印刷したいのですが、 EXCELはフォーマットシートをあらかじめ作成し、それを開いてデータを埋め込んでいます。 そのとき、フォーマットシートのほうでは用紙サイズをユーザー設定にして幅・高さを指定しているのですが、違うプリンタで印刷すると、A4サイズになってしまいます。 VBから用紙のサイズを設定できる方法はあるのでしょうか? よろしくお願いします。

  • エクセルでワークシートの列幅を保存したい

    エクセル2003を使用しています。 エクセルでセルの書式を保存して使いまわしたい時に、「スタイル」機能を使用していますが、ワークシートの列幅などを記録して他のシート、ブックなどで使うことができるでしょうか? よろしくお願いいたします。

専門家に質問してみよう