人に聞けない痔の悩み、これでスッキリ >>

VB・VCの初心者です。
Javaは結構かじっていたので、なんとなくわかりますが、そろそろVB・VC++等の勉強もしたいと思っております。

VB・VCを勉強するにあたり、疑問点があります。
そもそもVB・VC++・VC#の違いはなんでしょうか?
長所・短所があると思いますが、いまいちつかめきれておりません。
初心者のレベルでの質問で申し訳ないですが、
ご教授頂けますよう宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

VS2008ベースで。



VB.NET
*キーワードが想像しやすい(MustOverride, Shared とか)
*厳密な型付可変引数関数を一宣言で実装できる(Optionalキーワード)
*設定次第で厳密型付しなくてもプログラムできる(Strict Off)
*VB6の感覚でコーディングすると必ず嵌る

C#
*Javaでプログラム経験がある人に取っ付き易い
*.NETのために作られた言語なので、親和性が高い
*過去の柵に囚われず、言語拡張が起こりやすい
*unsafeによるポインタ操作が可能(VB.NETは不可)
*(私感)言語としてのお行儀は3種類の中で一番良いと思う

VC
*.NET/Win32コードの混在が可能で、できることが一番多い
*他プラットフォーム移植を考える場合、唯一の選択肢
*他アプリケーション連携でも唯一の選択肢(COMやPluginとか)
*互換性維持のため、記法が複雑になっている(new,gcnewとか)
*(私感)下手なプログラマに触らせると一番性質が悪くなる

.NET はちゃんと理解していないと、バリバリなプログラマさんでも
カウンタ不正な凡ミス起こしたりします。
VBやVCでのプログラム経験が"ある"人は要注意です。

質問者さんはJava経験者のようなので、こういった点には嵌りづらいと思います。恐らく言語周りでは苦労されないでしょう。
苦労されるとすれば、Windows特有の文化ですかね
(MessageDispatch, Handle とかのAPIと、相互運用のためのP/Invoke, CCW/RCW)
    • good
    • 0

 VB,C++,C#を語る場合、どうしてもWindowsとVisual Studio(以下、VSと略記)の経緯を無視できないので、けっこう長くなりました(申し訳ない)。

なお私はVBと長く付き合っているので、VBよりの回答になります。

(1)言語として
 これはもう、#1さんの参考URL(以下、URLと略記)に尽きますね。

(2)太古のBasicとC
 URLに書いてある太古のBasicがあるように、太古のCもあります。自分はFortranからプログラムに入ったので、Basicを見たとき、これはアマチュア用に骨抜きにされた C だと感じました。その後、両者の距離は縮まっていきますが、最初のVB2のVisual開発環境だけは、C++よりも遥かに進んだものでした。ただし出来る事は、まさに玩具。そのため実用レベルでは多量のAPIの支援が必要でした。実際いまでも、VBプログラマーズAPIレスキューマニュアルなんて本が現役で売れてます。つまりVBもやはり、C の骨抜き版として始まったのです。

(4)Windows小史
 初期のWindows3.1の開発モデルは、WindowsSDKです。これはC++を使って、何でもかんでもAPIで処理するスタイルです。この頃がVB2です。
 Windows95からモデルは、Vocument-View方式になりVC2が出て、その開発環境が始めてVisual Studioと呼ばれます。VB4のVSは、まだそう呼ばれていません(そう呼ばれるのは、VB5から)。その後のWindows98のモデルはWindowsDNAと三階層モデルですが、これらはVocument-View方式の明らかな延長線上にあり、すぐに陳腐化し、Windows2000でいちおう完成したと見ています。以上がVB4~VB6,VC2~VC6の時代で、VCの正体は、Visual C++でした(Visualの意味は、(6)に書きます)。
 WindowsXP以後のモデルは、Softoware Factories に移行し、.NETが導入され、VB.NET(2002~2008),Managed C と C# が出ます。C++を.NET仕様にしたのが、Managed C です。従って現在のVCは、Visual Managed C(2002~2008)と言えます。Managed C のWindows機能を多少圧縮し、Web機能を強化したのが C#(2002~2008)です。

(5)プログラムスタイル
 C++(VC)では、組み込みObjectを使って、Event Driven も出来る手続き型を書く事も可能ですし、Object指向をやる事も可能です。一方VBは、Event Driven も出来る手続き型を書く事が王道になります(MSの公式見解です。ただしVB6まで)。実際VB5でClassを持てるようになりましたが、VB6でも実装継承はサポートされませんでした。この頃、Objectとは名ばかりのVB、Visualとは名ばかりのVCなどと囁かれました。
 .NET以降は、VBも正式なObject指向が出来るようになり、VCのVisual度も上がり、現在では普通のWindows Applicationを書くだけなら、VBとVCはほとんど同じです。Cが必要になるのは、WindowsにInsideする場合です(Insideする理由は述べませんが)。
 URLにある高級AssemblerとしてのBasicは影も形もありません。しかし.NET Libraryがそれを肩代わりし(決して使い良くはないですが)、じつは.NET Library は、全ての C からも使えます。

(6)Visual Studioのやって来た事
 VSが今までやって来た事は、Windowsの開発モデルに従ってGUI周りのコード生成を、自動化した事です。VS2002でそれは、ほぼ完成の域に達しています。これが#1さんの「Javaに比べてGUI周りの開発が容易」の意味です。
 これと平行してもう一つの自動化が進んでいました。Data Base 周りの自動化です。これもVS2005 の Data Set で基本的にはほぼ完成と思われます。後はドライバーの種類が増えるでしょう。Data Setの目標は、表面上SQLを使わない、使わせないです。

(7)今後
 Softoware Factories には DSL という概念があり、UML の対極にある概念です。このDSL路線を歩んで来たのがVSです。.NETは当初、MSのJava退治に見えましたが、Softoware Factoriesが真の目的だったのかと、今では思っています。MSさんは、また何か企んでるようです。
 WindowsVistaには、新しい3つの基幹技術がFundationの名で搭載されており、VS2008には、それらに対するInterfaceまで付いています。3つのFundationを通して眺めるとこう思えます。「Application構造レベルでのコードの自動化に踏み切った」と。そう思えるのは、DSLとUMLの本質的違いからです(なぜ企みかも)。
    • good
    • 2

VBもVC++もVC#も主な開発環境はVisualStudioです(最新は2008)。


Express Editionであれば無償で学習が可能です
Javaに比べてGUI周りの開発が容易だと思います
(最近はNetBeansもGUIの開発を強化してるそうですが)

ただしExpress~はVSSによるソースコード管理などの機能がないので
そういった機能を求めるなら有償の上位editionを選択してください

VBは、VB6.0以前とVB.NET以降で区別したほうがいいかもしれません
Javaをかじってたのであれば本格的なオブジェクト指向言語に改良された.NET以降が
とっつきやすいと思われます

あとは言語の違いになると思います
参考URLに参考になりそうなサイトをリンクさせていただきました
目を通してみてください

参考URL:http://mag.autumn.org/Content.modf?id=2005050414 …
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

QC++とVC++の違いについて

この質問をご覧頂きありがとうございます。

みなさんに2つ、お聞きしたいことがあり、質問させていただきます。
1.C++とVC++とでは、どのくらいの違い(どういう違い、特徴)があるのでしょうか?

2.また、これからC++/VC++でプログラミングを始めようとした場合、
C++からVC++へと段階を踏んで勉強した方がよいのでしょうか?

一応、私のプログラミングの履歴としては、
言語としてVisual Basicは多少勉強はしておりました。
また、オブジェクト指向の基礎程度(多相、継承、カプセル化)は理解しています。

抽象的な質問で大変恐縮なのですが、
みなさんの経験論や、ご参考にした本、HP等がありましたら、
ご教授いただければと思います。

Aベストアンサー

こんにちは、honiyonです。
 VC++ は、Microsoftの発売している C++開発環境です。 純正C++に加え、独自に機能(という言い方でいいのかな?)を追加しており、更に開発しやすいソフト(環境)を添付してあります。

 VC++に限らず、大体はそうです。 ProC++も、Borland C++も皆そうです。
 今までお使いになっていた VBも、BASICコンパイラ+開発環境です。 
 こちらの場合、BASICに機能を追加・・・というより仕様そのものを大幅いじってますね(笑)

 VC++をただ単純に C++として使用するなら良いですが、VC++とMFCを使用してウインドウアプリケーションを作りたいという事であれば、死に物狂いな勉強が必要が必要かもしれません。Windowアプリケーションの処理プロセスを理解していないと、とっても難解に感じると思います。
 VC++でなければいや!という理由がなく、Visual Basicからスムーズに移行でき、かつVisual Basicより奥の深い事をしたい、というならば C++ Builder をお勧めします。 こちらで腕を慣らし、徐々にWindowアプリケーションの処理プロセス(WinMainから始まるプログラムの組み方の事です)を学ぶと良いかな、と思います。 その上で VC++&MFCな環境に移行すると、敷居はぐっと低くなります。
 私は一度VC++&MFCに挫折しましたが、こちらの方法で何とか理解する事が出来ました(^^;

 参考になれば幸いです(..
 

こんにちは、honiyonです。
 VC++ は、Microsoftの発売している C++開発環境です。 純正C++に加え、独自に機能(という言い方でいいのかな?)を追加しており、更に開発しやすいソフト(環境)を添付してあります。

 VC++に限らず、大体はそうです。 ProC++も、Borland C++も皆そうです。
 今までお使いになっていた VBも、BASICコンパイラ+開発環境です。 
 こちらの場合、BASICに機能を追加・・・というより仕様そのものを大幅いじってますね(笑)

 VC++をただ単純に C++として使用するなら良いで...続きを読む

QVBとVBAの違い

お世話になります。

現在、ExcelVBAで機械設計の計算をさせようと思い勉強しているのですが、VBとVBAの違い(VBと比較したとき、VBAできること、できない事)の境目?がいまいち判りません。
まだまだ勉強中で困惑しております。このままExcelVBAを勉強していく物か、VBについて勉強していくか迷っています。このままExcelVBAを勉強してExcelVBAを理解すれば判断できるかと思うのですが、畑違いの勉強になってしまわないかと心配です。

やりたいことは、各種計算の簡略化です。
現在は、関数電卓で行っていますが、これをパラメータを入力すると計算結果が出る。このような物を作りたいと思っています。

長くなってしまったのでまとめると、
1、VBAとVBの違い
2、ExcelVBAで設計計算が可能か
あと、
プログラムにより計算させるときに、最適なプログラム(JavaとかPHPとかHTML等など・・・)お勧めのプログラムがありましたらアドバイス頂けたらと思います。

Aベストアンサー

1. VBAとVBの違い

VBは単体で動作するアプリケーションが作れますが、VBAはOfficeが必要です。
また、VBAはOfficeの環境が使えるので、Excel等を使った入出力の機能が既にできていますが、VBではある程度自分で作る必要があります。また、費用的な面でVBは購入しないと使えませんが、VBAはOfficeがあれば使えますので、既にExcelなどを導入されているならば、追加の費用が必要ありません。
もし、複数の人間で作ったプログラムを利用され、かつその中にOfficeを持っていない人が含まれるのであればVBAではできませんので、VBが必要です。

2. ExcelVBAで設計計算が可能か

可能です。また、多分VBAを使わなくてもExcelの関数でもある程度のことが可能だと思われます。お持ちの関数電卓の桁数にもよりますが、相当な高精度が必要でない限り大丈夫です。

文面からすると、プログラミング未経験のようですが、やりたいことが明確なので、Excelをお持ちであればVBAで始めてみてはいかがでしょうか。他の言語(Java, C, PHP...)でも可能でしょうが、中には環境を用意しなくてはならなかったり、本質である計算以外に気にしなくてはならないことが多く、初心者にはとっつきづらいのではないかと考えます。

VBAからVBへの移行、VBからVBAへの移行はどちらも可能ですし、VBAからVBへの移行は多少時間がかかるかもしれませんが、VBよりVBAから始める方が楽なので、どちらに優越があるとは一概に言えないと思います。一人でちょっと使う程度や勉強用なら、ExcelVBAをお勧めします。
しばらくすると、ExcelVBAの限界を感じるようになると思うので、そこからVBに移行するというのでも悪くないと思います。

1. VBAとVBの違い

VBは単体で動作するアプリケーションが作れますが、VBAはOfficeが必要です。
また、VBAはOfficeの環境が使えるので、Excel等を使った入出力の機能が既にできていますが、VBではある程度自分で作る必要があります。また、費用的な面でVBは購入しないと使えませんが、VBAはOfficeがあれば使えますので、既にExcelなどを導入されているならば、追加の費用が必要ありません。
もし、複数の人間で作ったプログラムを利用され、かつその中にOfficeを持っていない人が含まれるのであればVBAではで...続きを読む

QアプリケーションでBasicとC++とStudioの違い

初歩的なことで申し訳ないのですが、MicrosoftのHP見てもよくわからなかったので教えてください。

VisualBacic と VisualC++ と VisualStudio.NET の違いを教えてください。
いずれも、Windowsでのプログラミング環境のアプリケーションですよね?

よろしくお願いします。

Aベストアンサー

> 左の4つは、その対応した言語しかコンパイルできない製品ということですか?
 基本的にはそう考えていただいて良いかと。この下は、Visual Studioについてより詳しい情報が必要な場合にのみ読んでください。基本はあなたの考えで良いので。

↑こんな言い回しにしたのは、頑張れば「コンパイル」はできるからだ。つまりだね・・・・ええと、どう言えば良いのかな。以下、VBやC++などのツールもまとめて「Visual Studio」と表記。
 「Visual Studio」という製品は、「開発を容易に進めるためのツール」であるという事。プログラムというのは、一般的に設計→コーディング→コンパイル→リンク→(EXEなどを)配置→リリース(使える状態)という順番で行われる。流れを見てもらえれば分かるように、コーディング、つまりプログラムをぱこぱこ打ち込んでいく作業と、コンパイル作業は別工程だ。
 Visual Studioとは、コーディングのアシストをしてくれて、コンパイル、リンクをワンクリックで行ってくれる「だけ」の製品なんだな。

 実はMicrosoft.netでは、Visual Studioを買わなくても開発は行える。死ぬほど不便という制限はあるが。Microsoftのサイトから、.Net Framework SDKというものをダウンロードしてきたら、4言語のコンパイラは手に入る。
 この場合、フリーソフトのコーディングお助けツールを使うか、メモ帳でプログラムを書いて、SDKでコンパイルを行う事になる。死ぬほど不便そうでしょ?
 つまり、「.Net Framework SDK(コンパイラ)」+「プログラミングお助けシステム」=「Visual Studio.Net」だ。このうち、コンパイラは無償提供されているので、我々はプログラミングお助けツールにお金を払っているわけだ。と言ったらなんかMSが悪者になるので、Visual Studio.Netからコンパイラの部分だけが無償で提供されている、という風に言い回しを変えておこう。

 この回答にある最初の行をより正確に言うと、
「左の4つは、その対応した言語しかコーディングのお助けをしてくれない製品」という事やね。

 ちなみに、C++やVB.NETに比べて、Studioが異常に高いのは、左4つの製品に入っているコーディングお助けツールに加えて、設計お助けツールや、グループ開発ツール、より便利なデバッグお助けツールが含まれているからでもあります。

 Visual Studioの各機能をできるだけ分かりやすい日本語にしようとして失敗した・・・・後半はあまり読まなくて良いかも。

> 左の4つは、その対応した言語しかコンパイルできない製品ということですか?
 基本的にはそう考えていただいて良いかと。この下は、Visual Studioについてより詳しい情報が必要な場合にのみ読んでください。基本はあなたの考えで良いので。

↑こんな言い回しにしたのは、頑張れば「コンパイル」はできるからだ。つまりだね・・・・ええと、どう言えば良いのかな。以下、VBやC++などのツールもまとめて「Visual Studio」と表記。
 「Visual Studio」という製品は、「開発を容易に進めるためのツール」であ...続きを読む

Qファイル出力の場所を指定

現在C++にてhtmlファイルを出力するプログラムを作っているのですが、出力場所を指定することはできるのでしょうか?(現在はそのプログラムソースが保存されている場所と同じファイル内に出力されますが、それをデスクトップに出力するなど。)
もし、方法がありましたら、教えてください。
ソースや参考HPのURLなどのせていただけたらありがたいです。
環境はVisualStudio.NET2003です。
よろしくお願いします。

Aベストアンサー

単にファイル名の前にパスを指定する。

絶対パス指定
fp=fopen("c:/temp/test.txt","w");

相対パス指定
fp=fopen("./hoge/test.txt","w");


デスクトップはOSやユーザによって場所が異なるので、少し面倒です。
XPの場合環境変数を利用してこんな感じで出来ると思います。

例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(void)
{
FILE *fp;
char fname[1024];
strcpy(fname,getenv("USERPROFILE"));
strcat(fname,"/デスクトップ/test.txt");
fp=fopen(fname,"w");
//処理
fclose(fp);
}

Q「該当」と「当該」の違い

辞書には、「該当」・・・その条件にあてはまること。「当該」・・・その事に関係がある。
・・・とあります。
“あてはまる”と“関係がある”、微妙に違うようで似ているようで、お恥かしいのですが私にははっきり区別ができないのです。
該当とすべきところを当該としたら、意味はまったく違ってくるでしょうか?
わかりやすく両者の違いや使い方を解説していただけませんか?宜しくお願いします。

Aベストアンサー

よく似た意味の言葉(名詞)ですが、

○該当…「する」をつけて「当てはまる」という意味の動詞として用いることができる

○当該…主に他の名詞の前につけて「今議論の対象になっている、まさにそのもの」という意味で内容を限定する形容詞的な形で用いる

といった違いがあります。逆の用法はありません。

・この条件に当該する人は申し出てください。

・○○事件につき、該当被告人を有罪に処す。

いずれもおかしな使い方で、反対でないとアウトです。

ご参考になれば幸いです。

QCで作成したDLL関数をVBから呼び 引数渡し方法

/**** Cプログラム *****/
int testAP( char* a)
aのポインタにアドレスを返します。

/**** VB プログラム****/
Public Declare Function testAP Lib "test.dll" (ByRef a As String) As Integer


Dim keydata As String * 128

lngRc = testAP(keydata)

上記VBのAPを実行するとアプリケーションエラーになります。
Cプログラムのデバックをすると入口ではaのポインタにはアドレスがセットされていて
、値を設定出来、最後まで正常動作して、VBとのインタフェースで落ちています。
VB6.exeでアプリケーションエラーになっています。

恐らく、VBにはポインタという概念が無いと聞いていてCのAPとの受け渡しに失敗して
そうなのですが、VBでの引き渡し方法が分かりません。
よろしくお願い致します。

Aベストアンサー

>__declspec(dllexport) int testAP(BSTR* cp_KeyData){
>
>→char*からBSTR*に変更しました。

だめです。そんな強引なことをしないでください。
char *でかまいません。
BSTR*にするとメモリ破壊が起きます。
__stdcallはどうしたんですか?
(ごめんなさい、アンダースコア2つですね)

>只、VCのデバックを行うと実行時エラー'49'
>DLLが正しく呼び出せません。が出力される。
>(DLL関数を呼んで処理が終了してVBに戻る所で出力されます。

VBのDeclareステートメントと、Cの処理があっていません。メモリを破壊しているのでしょう。
EXEにして動くのはたまたまでしょう。

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

Q【Excel】 セルの色での判断はできますか?

使用環境:Office2003

条件付書式を使用して、セルの値がxxならばセルを着色する・フォントを変える、というのは可能ですが、

逆に

セルの色がxx(例えば赤等)ならば、隣のセルに1を代入する

ということは可能でしょうか?
※VBAを使わなければそれにこしたことはないですが、
 必要ならばコーディングも教えてください

よろしくお願いします。

Aベストアンサー

過去の質問を検索していただくと、たくさんの事例がありますが、結論から言うとVBAを使用しないとセルの色は取得できません

>セルの色がxx(例えば赤等)ならば、隣のセルに1を代入する
VBAを使用すればもちろんできますが、これは「例えば」の質問であって、このコードを書いても意味はないのでは?

ですから汎用的に使えるユーザ定義関数にしました。以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。
ワークシート画面に戻って、適当なセルに
=CellColor(A1)
と入力してみて下さい。A1セルの色番号が表示されます。(背景色なしの場合は0が返ります)
この戻り値判定して、関数などでセルに値をセットすればよいでしょう

Function CellColor(ByVal rng As Range)
With rng.Cells(1, 1).Interior
If .ColorIndex = xlNone Then
CellColor = 0
Else
CellColor = .ColorIndex
End If
End With
End Function

ただしセルの背景色を後から変えても、ユーザ定義関数の戻り値は自動的には変わりません。式を入力した後で背景色を変更した場合は
 ALT+Ctlr+F9
で強制再計算させる必要があります。

過去の質問を検索していただくと、たくさんの事例がありますが、結論から言うとVBAを使用しないとセルの色は取得できません

>セルの色がxx(例えば赤等)ならば、隣のセルに1を代入する
VBAを使用すればもちろんできますが、これは「例えば」の質問であって、このコードを書いても意味はないのでは?

ですから汎用的に使えるユーザ定義関数にしました。以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて...続きを読む

Qfatal error LNK1120: 外部参照 1 が未解決です

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
  char tel[20];
  char address[20];
};

void message( void );
void input( FILE *fp, int cnt , struct meibo *a, int *end );

void main( void )
{
  struct meibo a[20];
  FILE *fp;
  int cnt, end;

  if( (fp=fopen( "meibo.dat", "w" ) ) == NULL ){
    printf( "Can not open the meibo.dat.\n" );
    exit( 1 );
  }

  message();

  fprintf( fp, "番号, 名前, TEL, 住所\n" );
  fflush( fp );

  cnt = 0;
  end = 0;
  while( end == 0 ){
    input( fp, cnt, &a[cnt], &end );
    cnt++;
    fflush( fp );
    if( cnt == 20 ){
      printf( "人数が一杯です.終了します.\n" );
      end = 1;
    }
  }
  fclose( fp );
}

void message( void )
{
  printf( "名前, TEL, 住所, endを入力してください.\n" );
  printf( "継続の時はend=0," );
  printf( "中止の時は,end=1と入力してください.\n" );
}

void input( FILE *fp, int cnt, struct meibo *a, int *end )
{
  printf( "名前-->" );
  scanf( "%s", a->name );
  printf( "TEL -->" );
  scanf( "%s", a->tel );
  printf( "住所-->" );
  scanf( "%s", a->address );
  printf( "Exit? Continue:0 Exit:1 -->" );
  scanf( "%d", end );
  printf( "\n" );
  fprintf( fp, "%2d, %s, %s, %s\n",
    cnt+1, a->name, a->tel, a->address );
}

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
...続きを読む

Aベストアンサー

http://www.a.math.ryukoku.ac.jp/~hig/course/compsci2_2005/man/faq.html
にある現象と同じではないでしょうか、一度お試しください。

QVB上で実行中の無限ループの止め方

今まで、CUIベースのBASICでのプログラムの経験はあるのですが
Visual系のBASICは初心者です。
原因はわかっているのでプログラムの修正はできるのですが
VB上でコンパイルして実行したときに無限ループに陥ってしまって
どうにもプログラムをとめられなくなります。
そんなことがないように、実行前に全てのプロジェクトを保存して
いますので、そんなに実害はないのですが、どうすればとめられるのでしょう・・
今現在は、タスクマネージャーから強制終了させています。

Aベストアンサー

無限ループの一番内側に
DoEvents
を入れておくと、ウィンドウ切替え->デバッガ終了操作が出来ますよ

危なそうなとこにも入れておくと、何かと安心です。


人気Q&Aランキング