ウインドウズ98とエクセルとワードを使っていますが、
かつてのBASICのようなプログラムを組んで実行
させることは可能なのでしょうか?例えば
10 A=1
20 A=A+1:IF A>9 THEN 50
30 FOR B=1 TO A:PRINT B
40 GOTO 20
50 PRINT A
60 END
というような簡単なものでいいのですが・・・。
どなたか教えて下さい。よろしくお願いします。

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

A 回答 (3件)

可能です。


Excel、WordともにVBA(Visual Basic for Applications)と言うマクロ環境を持っています。

実際にどのように使うかですが、Excel2000を例に答えます。
なお、下記は、質問でご提示のプログラムを動作するようにExcelのVBAで動くように手直ししたものです。

□例
1.ワークシートを新規作成
2.メニューの[ツール]-[マクロ]-[Visual Basic Editor]でVisual Basic Editorを起動
3.メニューの[挿入]-[標準モジュール]で標準モジュールを挿入
4.メニューの[挿入]-[プロシージャの挿入]でプロシージャ挿入のダイアログを出す。
5.プロシージャ挿入のダイアログで「名前」をTEST、「種類」をSubプロシージャ、「適用範囲」をPublicプロシージャにしてOKボタンを押す。
6.Publuc Sub TESTからEnd Subの間を下記のように記述

Public Sub TEST()
  Dim A As Integer
  Dim B As Integer
  A = 1
  Do
   A = A + 1
   If A > 9 Then
    Exit Do
   End If
   For B = 1 To A
    MsgBox B
   Next
  Loop
  MsgBox A
End Sub

(上記のプログラムは見やすくするために全角のスペースを使用しています。実際に動かす場合は、全角のスペースは半角のスペースに変えてください。)

7.Public Sub TESTとEnd Subの間のいずれかの位置にカーソルを置いた状態でF5キーを押してプログラムを実行する。

Excelのシートからマクロを起動することなども出来ますが、回答欄ではとてもご紹介できないので、ご勘弁ください。
    • good
    • 0

VBScriptを使用したらいかがでしょうか。


アプリを起動する必要もなく単体での動作も可能です(スクリプトエンジンはインストールしておく必要があります)。
ソースも普通のテキストエディタで作成し拡張子をVBSにして保存します。
下記URLを参考にしてください(ドキュメント等のダウンロードも出来ます)。

参考URL:http://www.microsoft.com/japan/developer/scripti …
    • good
    • 0

WordやExcelでは従来のBASICプログラムは動作させることは出来ません。


どうしてもWord/Excel上で動かしたいのでしたら、VBAで従来のBASICプログラムを動作させるマクロ等を作成すれば出来なくもないですが、現実的ではありません。

単にWindows98上で従来のBASICのプログラミングを動かしたいのであれば、以下のようなソフトがあります。

ActiveBasic
http://www2s.biglobe.ne.jp/~yamadai/

N88互換BASIC for Windows
http://www.vector.co.jp/soft/win95/prog/se055956 …

参考まで
    • good
    • 0

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

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

Qオブジェクト指向における「クラスA have a クラスB」の関係において,クラスBからクラスAのあるメンバ変数だけを触る方法

クラス10~50個の中規模プログラミングに当たって,以下の問題がよく出てきて,
「簡潔な方法はないものか・・・」と悩んでいます.

●前提条件
【・「クラスAに持たれているクラスB( A have a B 関係)において,
  クラスBからクラスAのあるメンバ変数(プロパティ)だけを触りたい」】

この場合,私はよく以下のようにしてしまい,クラス間の独立性を無くしてしまいます.
●方法1:
・クラスBのコンストラクタに「自分の持ち主であるクラスAのオブジェクト」を引数に取り,クラスBの変数(プロパティ)usedClassAとする.

=======
C言語風に書くと,
<code>
public void クラスA{
  クラスB usingClassB = new クラスB(); // 持っているクラスB
  int commonNum = 0;
  public void AddCommonNum(){
      commonNum++;
   }
   ...
   (その他の処理)
   ...
}

public void クラスB{
   class usedClassA;    // 持ち主のクラスA

   // コンストラクタ
   public クラスB(クラスA _usedClassA){
       usedClassA = _usedClassA;
   }
   public void AddCommonNum(){
       _usedClassA.AddCommonNum();
   }
}
<\code>
となります.

この方法の問題点は,クラスAとクラスBに<双方向の依存関係を作っている>ことで,
クラスAの設計(ここではAddCommonNum())が変更されたときに,クラスBの内容を変更しなければならない可能性があることから,拡張性に欠けると考えています.

そこで,他に何かいい実装方法が無いか,
教えていただけないでしょうか?
特に,このような前提条件に汎用的に使える方法だと尚良いです.

クラス10~50個の中規模プログラミングに当たって,以下の問題がよく出てきて,
「簡潔な方法はないものか・・・」と悩んでいます.

●前提条件
【・「クラスAに持たれているクラスB( A have a B 関係)において,
  クラスBからクラスAのあるメンバ変数(プロパティ)だけを触りたい」】

この場合,私はよく以下のようにしてしまい,クラス間の独立性を無くしてしまいます.
●方法1:
・クラスBのコンストラクタに「自分の持ち主であるクラスAのオブジェクト」を引数に取り,クラスBの変数(...続きを読む

Aベストアンサー

 こんにちは。
 簡単な話、共通のプロパティクラスを作成して、ClassAとClassBが其れを参照したり更新したりすれば、ClassAとClassBは左程依存しないのでは。
 一応C++で、其れらしき事をしてみましたので、参考程度に。

#pragma warning(disable : 4786)
#include<map>
#include<string>

//プロパティオブジェクトココから
struct IVariantHolder
{
  virtual ~IVariantHolder(){ }
};

template<class __TP>
struct CVariantHolder : public IVariantHolder
{
  typedef typename __TP variant;

  explicit CVariantHolder(const variant& val) : m_val(val){}
  ~CVariantHolder(){}

  variant& Get(){ return m_val; }
  const variant& Get() const { return m_val; }
  operator variant&(){ return m_val; }
  operator const variant&() const { return m_val; }
private:
  variant m_val;
};

struct CPropertyData
{
  typedef std::map<std::string, IVariantHolder*> map_t;
  template<class __TP>
  bool AddProperty(const __TP& tp, const std::string& sPropertyName)
  {
    if(GetProperty(sPropertyName))return false;
    return m_map.insert(std::make_pair(sPropertyName, new CVariantHolder<__TP>(tp))).second;
  }
  IVariantHolder* GetProperty(const std::string& sPropertyName)
  {
    return const_cast<IVariantHolder*>(
                static_cast<const CPropertyData&>(*this).GetProperty(sPropertyName)
                     );
  }
  const IVariantHolder* GetProperty(const std::string& sPropertyName) const
  {
    map_t::const_iterator it = m_map.find(sPropertyName);
    return it == m_map.end() ? 0 : it->second;
  }
private:
  map_t m_map;
};

template<class __TP>
static __TP* Lock(CPropertyData* property, const std::string& sPropertyName)
{
  CVariantHolder<__TP>* pVal = dynamic_cast<CVariantHolder<__TP>*>(property->GetProperty(sPropertyName));
  return pVal ? &pVal->Get() : 0;
}
//プロパティオブジェクトココまで

//テスト用の構造体
struct CommonStruct
{
  CommonStruct(long _l, short _s, char _c) : l(_l), s(_s), c(_c){}
  longl;
  shorts;
  charc;
};

//クラスAとクラスBココから
struct ClassB;
struct ClassA
{
  ClassA(ClassB* p, CPropertyData* property) : m_useClassB(p), m_property(property)
  {
    //ココでメンバ変数(プロパティ)の領域を動的に作成する
    m_property->AddProperty(int(0), "commonNum");
    m_property->AddProperty(CommonStruct(4, 2, 1), "commonStruct");
  }
  void DisplayProperty()
  {
    ::printf("%s %d %s\n", "[commonNum : ", *::Lock<int>(m_property, "commonNum"), "]");

    CommonStruct* p = ::Lock<CommonStruct>(m_property, "commonStruct");
    ::printf("%s <%d><%d><%d> %s\n", "[commonStruct <l><s><c> : ", p->l, p->s, p->c, "]");
  }
private:
  ClassB*m_useClassB;
  CPropertyData*m_property;
};

struct ClassB
{
  explicit ClassB(CPropertyData* property) : m_property(property){}
  void AddCommonNum()
  {
    int* pi = ::Lock<int>(m_property, "commonNum");
    (*pi)++;
  }
  void SetCommonStruct(long l, short s, char c)
  {
    CommonStruct* pc = ::Lock<CommonStruct>(m_property, "commonStruct");
    new (pc) CommonStruct(l, s, c);
  }
private:
  CPropertyData*m_property;
};
//クラスAとクラスBココまで

//お試し
int main()
{
  //両方に共通なプロパティオブジェクト
  CPropertyData property;

  //クラスBに渡す
  ClassB b(&property);

  //クラスAにクラスBとプロパティオブジェクトを渡す
  ClassA a(&b, &property);

  //クラスBでプロパティを操作する
  b.AddCommonNum();
  b.SetCommonStruct(10, 20, 30);

  //クラスAでプロパティを表示する
  a.DisplayProperty();
  return 0;
}

 こんにちは。
 簡単な話、共通のプロパティクラスを作成して、ClassAとClassBが其れを参照したり更新したりすれば、ClassAとClassBは左程依存しないのでは。
 一応C++で、其れらしき事をしてみましたので、参考程度に。

#pragma warning(disable : 4786)
#include<map>
#include<string>

//プロパティオブジェクトココから
struct IVariantHolder
{
  virtual ~IVariantHolder(){ }
};

template<class __TP>
struct CVariantHolder : public IVariantHolder
{
  typedef typename __T...続きを読む

Qオートマトン L = {ww^R: w ∈ {a, b}+}の中心の見つけ方

下記のようなオートマトンがあります。

L = {ww^R: w ∈ {a, b}+}
M = (Q, Σ, Γ, δ, q0, z, F)
Q = (q0, q1, q2),
Σ = {a, b},
Γ = {a, b, z},
F = {q2}.

(1)wをスタックに載せるために:
δ(q0, a, a) = {(q0, aa)}
δ(q0, b, a) = {(q0, ba)}
δ(q0, a, b) = {(q0, ab)}
δ(q0, b, b) = {(q0, bb)}
δ(q0, a, z) = {(q0, az)}
δ(q0, b, z) = {(q0, bz)}

(2)どこが文の中心か見つけるために(状態がq0からq1に変わる):
δ(q0, λ, a) = {(q1, a)}
δ(q0, λ, b) = {(q1, b)}

(3)w^Rと一致させるために:
δ(q1, a, a) = {(q1, λ)}
δ(q1, b, b) = {(q1, λ)}

(4)最後に:
δ(q1, λ, z) = {(q2, z)}

とあります。
問題の中にこれを元にしてL = {wcw^R: w ∈ {a, b}*}のnpdaをつくりなさい、
というのがありますが、それは(2)を
δ(q0, c, a) = {(q1, a)} ←cが入力されたらそこが中心
δ(q0, c, b) = {(q1, b)}
に変えて
δ(q0, λ, z) = {(q2, λ)} ←何も入力されなかったら文字を受け付ける(* → +なので)
を付け加えればよいですか? (多分、そうですよね?)

それと、上の(2)がどうやって中心を見つけているのか分かりません。
入力中は何文字入力されるかなんて分かりませんよね。
例えばbaabbaabという文があったとすると最初の四文字でbaabで
「さては中心はbaとabの間だな!」とか勘違いとかしないんですか?
入力がλということは毎回毎回入力がある度にチェックしているということでしょうか?
混乱している私に分かりやすい説明ができる方、どうかお願いします。

下記のようなオートマトンがあります。

L = {ww^R: w ∈ {a, b}+}
M = (Q, Σ, Γ, δ, q0, z, F)
Q = (q0, q1, q2),
Σ = {a, b},
Γ = {a, b, z},
F = {q2}.

(1)wをスタックに載せるために:
δ(q0, a, a) = {(q0, aa)}
δ(q0, b, a) = {(q0, ba)}
δ(q0, a, b) = {(q0, ab)}
δ(q0, b, b) = {(q0, bb)}
δ(q0, a, z) = {(q0, az)}
δ(q0, b, z) = {(q0, bz)}

(2)どこが文の中心か見つけるために(状態がq0からq1に変わる):
δ(q0, λ, a) = {(q1, a)}
δ(q0, λ, b) = {(q1, b)}

(3)w^Rと一致させるため...続きを読む

Aベストアンサー

先の2つの御質問からすると、non-deterministic(非決定的)なPDAを考えているわけですよね。

非決定的なオートマトンでは、「1つの入力系列に対して複数の遷移経路が考えられるが、そのうち1つでも受理状態で遷移が終了する経路が存在すれば、オートマトンはその入力を受理する」と考えます。

baabbaabの例であれば、"b"しか入力されていない状態、"ba"まで入力された状態、...、"baabbaab"まで入力されてしまった状態、のどこで(2)の遷移をやってもいいんです。
そのうち"baab"の状態で(2)の遷移をすれば受理状態で遷移が終了するので、このオートマトンは"baabbaab"を受理するといえるわけです。

> それは(2)を
> ....
> を付け加えればよいですか? (多分、そうですよね?)
そこはそれで合っていると思いますよ。

Qマクロで、質問です。 Find関数を使う時。。 Set FoundCell = Range(”A:

マクロで、質問です。
Find関数を使う時。。

Set FoundCell = Range(”A:A”).Find(Cells(j.code).Row

if FoundCell Is Nothing Then
処理
Else
処理

の場合、(格納が合っているかは分かりませんが…)
見つからなかった場合の処理はせずスルーして
次にまだまだあるコードにうつるには処理のところはなんと記述すれば良いのですか?

Aベストアンサー

nk.knさんが書いたIf文は次のような意味ですよね。

If FoundCell Is Nothing Then
  見つからなかった場合の処理
Else
  見つかった場合の処理
End If

見つからなかった場合、その処理をスルーするのであれば、その処理を書かなければ良いだけです。こんな感じです。

If FoundCell Is Nothing Then
Else
  見つかった場合の処理
End If

でも、普通は次のように書きますね。

If Not FoundCell Is Nothing Then
  見つかった場合の処理
End If

Q正規表現で、htmlタグの td height="100" → td style="height:100px"できますか。

正規表現をつかって、htmlタグの td height="100" になっているところを td style="height:100px"に一発変換したいのですが、
正規表現の書き方がわかりません。
また、100にかぎらず、200、250など、そこの値はばらばらなのを一発変換したいです。

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

Aベストアンサー

秀丸エディタでは置換ダイアログで

 検索(S):「td \fheight\f="\f[0-9]+\f"」
 置換(E):「td style="\1:\3px"」

として、正規表現にチェックを入れて実行すれば
置換できますよ。

Qメールのタグ(○○)の、件名ではなく本文に文章を書き込んだ状態のメールを作りたいのですが。

メールのタグ(<a href="mailto:"○○@△△>○○@△△</a>)の、件名ではなく本文に文章を書き込んだ状態のメールを作りたいのですが。

サブジェクトに指定の文章を入れる方法は、分かります。
(○○@△△?※○○についての問合せ=subject)

では、メールフォームが立ち上がった状態になった時に

【メールアドレス】
○○@△△
【件名】
※○○についての問合せ

【本文】
・名前

・住所

・電話番号

・メッセージ

と、するのはどうすればいいのでしょうか?
うまく文章がまとまらず、分かりづらいかもしれませんが
教えて下さい。よろしくお願い致します。

Aベストアンサー

bodyだそうです。

参考URL:http://www.tagindex.com/html_tag/link/a_mailto_sub.html


人気Q&Aランキング

おすすめ情報