Visual BASICで値をフォーマット命令を使い、+あり、-ありの値を縦に表示させ、各桁をそろえたいのですが、+の場合は、+を表示しないので、+の値だけ、1桁左詰めで表示されてしまいます。簡単に解消できる方法はありますか? 教えてください。

現在のプログラム  print Format(変数,"###")

今の例
123
-123

希望する表示
 123
-123
     ブラウザで見ると3と3がそろっていませんが、合わせて書いたつもりです

A 回答 (2件)

Format(変数, " ###;-###")



の書式部分は、
空白・シャープx3・セミコロン・マイナス・シャープx3
で、間に入るのは、セミコロン。

書式をセミコロンで区切って最大4つまで指定できます。
正の数、ゼロ、負の数の別などで書式を選択する機能があるのですよ。
ヘルプでFormat関数の関連項目で「数値を表すその他の書式 (Format 関数)」というトピックを参考にしてください。
    • good
    • 0
この回答へのお礼

正と負の区切りは ; だったのですね。
おかげで、縦列がまっすぐになり、たいへんすっきりしました。
ありがとうございました。

お礼日時:2001/03/25 23:25

正負別複数書式で対応できますよ。



Format(変数, " ###;-###")

この回答への補足

回答、ありがとうございます。

Format(変数,"###,-###")とのことですが、 - が中間に入るのはおかしくないですか?
試してみたらうまくいかないようですが。
またFormat(変数,"-###") とすると、 -123の場合 --123と表示してしまいます。
正の場合は空白を頭に、負の場合は、-を頭につけたいのです。もしくは
正の場合は+を頭に、負の場合は、-を頭につけたいのです。
なにかのBASICで S(符号)があったようですが、VBではないようです。
プログラムで判別するのでなく、formatコマンドだけで簡単に行う方法はありますか?

補足日時:2001/03/24 23:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFormat 関数 表示書式指定文字の指定

符号を表記する指定として MS-BASIC の
Print using "+####.###"; A!
の「+」に相当する指定は何でしょうか。

動作環境
Visual basic 6.0 SP5
Windows 2000 SP2

Aベストアンサー

Format関数では、書式を正,負,ゼロの場合に分ける必要があります。
だから、正のとき「+」、負の時「-」記号をつけるなら
format(123456,"+###,##0;-###,##0;0")
とします。

QVBからPDFファイル自動生成するには

VBから印刷イメージを自動にPDFファイルに変換し指定フォルダに保存するにはどのようにすればよいのでしょうか?
いろいろ調べても良くわかりません。
できればサンプルプログラムもあれば幸いです。

現在は、通常使うプリンタにAcrobat PDFWriterを指定し手動でPDFファイルを作っている次第です。

環境としてはWindows2000、VB6.0、Acrobat4.05です。

どんな情報でも結構です。お待ちしております。

Aベストアンサー

サンプルです。

Option Explicit

'開発環境: VB6SP5 Acrobat4.0
'参照設定:Adobe Acrobat 4.0 Type Library
'    参照設定初回設定時は「Acrobat」と表示されています
'    一度チェックをつけ、もう一度参照設定ダイアログを開くと「Adobe Acrobat 4.0 Type Library」になっているはずです。

Sub TEST()
  Dim acroApp     As CAcroApp   'CAcroAppオブジェクト
  Dim acroPDDoc    As CAcroPDDoc  'CAcroPDDocオブジェクト
  Dim acroExchAVDoc  As CAcroAVDoc  'CAcroAVDocオブジェクト
  Dim blnRtn     As Boolean   '戻り値
  Dim lngAVDocNum   As Long
  
  'インスタンス生成
  Set acroApp = CreateObject("AcroExch.APP")
  Set acroPDDoc = CreateObject("AcroExch.PDDoc")
  Set acroExchAVDoc = CreateObject("AcroExch.AVDoc")

'デバッグ用
acroApp.Show
 
  'ファイルオープン
  blnRtn = acroExchAVDoc.Open("c:\test.bmp", "")
  If blnRtn Then
    MsgBox "オープンエラー"
    GoTo PGMEND:
  End If
  
  '変換処理中の待機処理
  Do While lngAVDocNum = acroApp.GetNumAVDocs
    DoEvents
  Loop
  
  '変換済みのアクティブPDFファイルオブジェクト取得
  Set acroExchAVDoc = acroApp.GetActiveDoc()
  Set acroPDDoc = acroExchAVDoc.GetPDDoc()
    
  'PDFファイルとしてセーブ
  blnRtn = acroPDDoc.Save(PDSaveFull Or PDSaveCollectGarbage Or PDSaveLinearized, "c:\test.pdf")
  
  If Not blnRtn Then
    MsgBox "セーブエラー"
    GoTo PGMEND:
  End If
 
 
PGMEND:
  '閉じる
  blnRtn = acroExchAVDoc.Close(False)
  acroApp.Exit
 
  '開放
  Set acroExchAVDoc = Nothing
  Set acroPDDoc = Nothing
  Set acroApp = Nothing
End Sub

サンプルです。

Option Explicit

'開発環境: VB6SP5 Acrobat4.0
'参照設定:Adobe Acrobat 4.0 Type Library
'    参照設定初回設定時は「Acrobat」と表示されています
'    一度チェックをつけ、もう一度参照設定ダイアログを開くと「Adobe Acrobat 4.0 Type Library」になっているはずです。

Sub TEST()
  Dim acroApp     As CAcroApp   'CAcroAppオブジェクト
  Dim acroPDDoc    As CAcroPDDoc  'CAcroPDDocオブジェクト
  Dim acroExchAVDoc  As CAcroAVDoc  'CAcro...続きを読む

QVB6.0-整数と余りを求める

表題の通り、整数と余りを求める関数を教えてほしいです:例:100/60=1余り40
整数:1
余り:40
よろしくお願いいたします。

Aベストアンサー

Dim A,B,C,D as integer
A=100
B=60
C=Int(A/B) <---答は1
D=A mod B

●IntはAをBで割った時の整数部分を求める関数ですが、答が負の場合は
注意が必要です。 例 Int(-100/40)=-2
これを回避する場合 Fixがいいです

●mod は A を B で割った時の余りを求める関数

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVBの「As String * 128」とは?

VBの「As String * 128」とは?

Visual Basic 2010 Expressでコンソールアプリケーションを作成しています。

OSのヴァージョンを取得する機能を作成したかったので、

http://hanatyan.sakura.ne.jp/vbhlp/Version.htm

を参考にして、OSVERSIONINFOの構造体を定義しました。

しかし
szCSDVersion As String * 128

「* 128」
の部分で、ステートメントの終わりを指定してくださいとエラーが出ます。

「* 128」とは、いったいどういう意味ですか?

また、エラーを無くす方法はありますか?

いろいろ検索しましたが、調べ方が悪いのか、分かりませんでした。

よろしくお願いします。

Aベストアンサー

参考にされたサイトはVB6.0用のソースですね。
VB6.0とVB2010(=VB.NET)は色々な部分が変わってますので、VB.NET用のサンプルを見た方が良いと思います。

http://dobon.net/vb/dotnet/system/osversion.html

ちなみに一応、質問に答えると…

> 「* 128」とは、いったいどういう意味ですか?

VB6.0(VB2010の5世代前のバージョン?)で固定長文字列を表す定義です。
* 128と記述すると128文字以上の文字列を入れても自動的に128文字でカットされます。

> また、エラーを無くす方法はありますか?

VB2010(=VB.NET)では以下のように記述します。
<VBFixedStringAttribute(128)> Private szCSDVersion As String

Qプロシージャからイベントをコールする

いつもお世話になっております。
VB.NETで開発をしておるのですが、
AAAのプロシージャからButton1_Clickのイベントを呼ぶ場合
Private Function AAA()
Call Button1_Click(**(1)**,**(2)**)
End Function
(1)と(2)に何を入れればよいのでしょうか?

宜しくお願いいたします。

Aベストアンサー

manihei様がすでにプログラマーとしてご活躍されていれば
お分かりのように、システム開発はほとんどの場合1人ではなく、
数名の方と一緒に開発されていると思います。
また、たとえ1人で開発されている場合でも毎日のようにコーディング
していれば、1度自分が書いたプログラムでも3日も経てば他人が書いたコードの
ように思えるはずです。
その上で、ただ「ボタンを押す」というコードを.NETで用意されている
1.Button1.PerformClick()
とするか
2.Button1_Click(New Object, New System.EventArgs)
とした場合どちらがわかりやすいでしょうか?
きっと、2のコードが書かれていた場合、manihei様を含め、
後でプログラムを見た人はきっと何らかの思惑が有って2のコードを
書いたはずだと考えるのでは無いでしょうか?
そして、何の意味も無いことが分かり、ガックリし軽い怒りを覚えます。
ttyp03様も何度もおっしゃっているように、「わかりやすい」コードを
書くのは未来の自分の為でもあるのでは無いでしょうか?



また、ボタンのイベントハンドラは以下のようになってますが、
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'処理
End Sub
イベントハンドラの引数にObject型のsender、System.EventArgs型のeが有ります。
senderはイベントが発生したオブジェクト(この場合ボタンですね)の情報が入ってます。
同様にeにも発生したイベントの情報が含まれてます。
ボタンの場合eにはたいした情報は有りませんが、テキストボックスのキーダウン
イベントなどでは、どのキーが押されたかなど様々な情報を取得出来ます。
開発者は当然その前提の下でイベントハンドラを実装します。

---------------------------------------------
イベントハンドラ内の処理例
'sender(Object)をbutton型にキャスト
Dim btn As Button = DirectCast(sender, Button)
'ボタンの名前を表示
MessageBox.Show(btn.Name)
---------------------------------------------

そこで、例えばAAAと言うメソッド内にボタンを押すという意味で以下のコード
Button1_Click(New Object, New System.EventArgs)
を使ってしまえばイベントハンドラ内では何の情報も得ることが出来ないどころか例外が発生します。

逆に、AAAと言うメソッド内でButton1_Click(New Object, New System.EventArgs)
などとイベントを直接呼んでいるのを知らずボタン内のイベントハンドラで
処理例のようなコードを誰かが書いたとしましょう。
さらに、AAAというメソッドは滅多に通る事が無く、テストの手抜きでリリースまで
しちゃた時には非常にアワワな事になります。
manihei様の安眠の為にもお勧め致しません。


最後に、補足では有りますがご質問内に有る
>Private Function AAA()
>Call Button1_Click(**(1)**,**(2)**)
>End Function
ですが、正確にお答えすると、
(1)には、Objectクラスまたは、Objectクラスの派生クラスのオブジェクト
(2)には、System.EventArgsクラスまたは、System.EventArgsクラスの派生クラスのオブジェクト
となります。オブジェクト指向の継承やポリモフィズムの部分を勉強すると意味が
分かるようになり、ボタンイベントだけでは無く今後プログラムを作成する上で
manihei様のお役にたつのではないかと思います。

長々と乱文失礼しました。

manihei様がすでにプログラマーとしてご活躍されていれば
お分かりのように、システム開発はほとんどの場合1人ではなく、
数名の方と一緒に開発されていると思います。
また、たとえ1人で開発されている場合でも毎日のようにコーディング
していれば、1度自分が書いたプログラムでも3日も経てば他人が書いたコードの
ように思えるはずです。
その上で、ただ「ボタンを押す」というコードを.NETで用意されている
1.Button1.PerformClick()
とするか
2.Button1_Click(New Object, New System.Event...続きを読む

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QVB6 配列を初期化したい

VB6でループさせて配列に値を入れて、計算させて最終的に求めたい値をRとします。そのときループで繰り返すためか同じ配列に値を入れてどんどん値がでかくなりRの値がおかしくなってしまいます;
おそらく問題は一回前に入れた配列がそのままのこってしまってるからなのだと思うのですが;
配列の中の値をクリアする方法はないものでしょうか?
一応、配列=0として初期化しようとしても値は変わらず前のが残ったままになってしまっています;
どなたかわかる方いらっしゃいましたらご回答宜しくお願いします

その他何かいい方法があればそれも教えていただけたらと思います

Aベストアンサー

Eraceステートメントを使用

  Dim a() as Long
  Dim s(100) as String
  Dim x() as Long

  Erase a     ’要素が0になる
  Erase s     ’要素が""になる

  Redim x(100) as Long

  Erase x      ’メモリを解放

注)VB2005の場合は動作が異なるので注意して下さい。

QInteger変数をカラにしたいのですが

Dim x as Integer

x=100
~~~
何らかの処理
~~~
x=Empty

と言う感じで一回数値を入れてまたカラにしたいのですが、
Emptyですと0になってしまい、カラにはなりません。
カラにするにはどうしたらいいのでしょうか。
よろしくお願いいたします。

Aベストアンサー

Integer型は-32763~32767の範囲の数字が必ず入りますので空にはできません。
String型でしたらNULL(=Empty)にできるのですが。

Q白い部分を透明にすることは可能ですか?

ペイントで白い部分を透明にすることは可能ですか?
やり方を教えてください。
ペイントじゃできないのかも教えてください。

Aベストアンサー

 残念ながらペイントでは、まわりが、白いままです。
 
 お使いのパソコンのOSが、一致するようでしたら
 
 無料のソフト「GIMP」(ギンプ)を使用することをおすすめします。

 ・Gimp2のダウンロードページ
 http://www.geocities.jp/gimproject2/download/gimp-download.html


 ・GIMP(ギンプ)の使い方
透過(透明な部分を作る技法)
 保存は、gifかpngの拡張子にして下さい

  http://www.geocities.jp/gimpmanual/manual.html

 ※jpgは、写真を構成するのが、目的な拡張子ですので
   まわりが、白くなり透明には、なりません。


人気Q&Aランキング