エクセルで立方メートルm3の3を上付にしたり、化学式の指数部を下付にするのはかなり面倒ですが、マクロでこの作業を簡単にしたいと思っています。ところがマクロを作ること自体が初心者なもので、このサイトで見つけて化学式の方は解決したのですが、それを参考に作ろうにもどこをどーいじっていーものやらさっぱりわからず、中々ビンゴのマクロが作れません。どなたかお力添えを。

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

A 回答 (3件)

分かりやすく書いたつもりです。

変更したい範囲を選択して実行します。
化学式やこれらのマクロを、ツール→マクロ→マクロ→オプションでショートカットキーに割り当てれば操作性もよくなると思います。

以下は標準モジュールに貼り付けます。ご参考に。

Public Sub m3_Uetuki()
  Dim rg As Range 'セル
  Dim L As Integer 'カウンタ
  Dim Shiki As String '式(文字列)
  Dim moji As String 'mか?

  For Each rg In Selection
    Shiki = rg.Text

    For L = 1 To Len(Shiki) - 1 '文字の長さ-1を調べる
      Select Case Mid(Shiki, L, 1) '調べる文字
        Case "m", "m" '半角または全角のm
          Select Case Mid(Shiki, L + 1, 1) '次の文字
            Case "3", "3" '半角または全角の3
              '上付き文字にする
              rg.Characters(L + 1, 1).Font.Superscript = True
            Case Else
          End Select
        Case Else
      End Select
    Next
  Next
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
助かりました。

お礼日時:2001/12/11 15:17

以前回答したことがあります。

化学式を簡単に入力する方法(http://www.okweb.ne.jp/kotaeru.php3?q=133017)

上記例でいえば、下付き文字は『化学式』だからこのVBAでできています。どこからどこまでが添え字か一意に決まるからです。

質問にある平方メートルや立方メートルだけなら簡単にできますが、一般的な式を自動的に評価するのは困難でしょう。
例えば、A12はAの12乗かA1の2乗かは判別不能でしょう。(化学式のH2Oはどの文字を下付きにするかは判定できます)

今回作ってみたのは、ルールに従って入力すれば、上付き・下付きに変換するマクロです。
 ○上付きのルール・・・開始位置に『^』を入力し、終了位置に『スペース1個』
 ○下付きのルール・・・開始位置に『_』を入力し、終了位置に『スペース1個』
例えば、
  f_x =X^n +Y^n =Z^n  や
  9^3 +10^3 =12^3 +1^3 や m^2、m^3、H_2 O のように入力します。

かなり長くなってしまいました。標準モジュールに貼り付け、セル範囲を選択して実行します。

Public Sub UesShitatukiMoji()
  '上付き、下付き文字は『^』、『_』と『スペース1個』で挟まれている前提!
  '1つのセル内に100個の上付き、下付き文字まで可能
  Dim rg As Range 'セル
  Dim Moji As String 'セルの式(文字列),最初の文字列
  Dim pUp As Integer, pDw As Integer '上付き位置、下付き位置
  Dim UPorDW(100) As Boolean '上付きか下付きか
  Dim p1(100) As Integer, p2(100) As Integer '『^』or『_』と『スペース』の位置
  Dim cot As Integer, ss As Integer 'カウンタ

  For Each rg In Selection
    Moji = rg.Text & " "
    Moji = Application.Substitute(Moji, "^", "^") '全角なら半角に置き換える
    Moji = Application.Substitute(Moji, "_", "_") '全角なら半角に置き換える
    Moji = Application.Substitute(Moji, " ", " ") '全角なら半角に置き換える

    cot = 1
    pUp = InStr(1, Moji, "^") '上付き
    pDw = InStr(1, Moji, "_") '下付き
    UPorDW(cot) = SUPERorSUBscript(pUp, pDw)
    If pUp = 0 Then pUp = pDw
    If pDw = 0 Then pDw = pUp
    p1(cot) = WorksheetFunction.Min(pUp, pDw)
    While p1(cot) > 0
      If p1(cot) > 0 Then 'べき乗の位置を調べる
        p2(cot) = InStr(p1(cot) + 1, Moji, " ")
      End If

      cot = cot + 1
      pUp = InStr(p2(cot - 1), Moji, "^")
      pDw = InStr(p2(cot - 1), Moji, "_")
      UPorDW(cot) = SUPERorSUBscript(pUp, pDw)
      If pUp = 0 Then pUp = pDw
      If pDw = 0 Then pDw = pUp
      p1(cot) = WorksheetFunction.Min(pUp, pDw)
    Wend
    '『^』と『_』と『スペース』を削除する
    For ss = cot - 1 To 1 Step -1
      Moji = Left(Moji, p2(ss) - 1) & Right(Moji, Len(Moji) - p2(ss))
      p2(ss) = p2(ss) - (ss - 1) * 2
      Moji = Left(Moji, p1(ss) - 1) & Right(Moji, Len(Moji) - p1(ss))
      p1(ss) = p1(ss) - (ss - 1) * 2
    Next

    If cot > 1 Then '上付きまたは下付き指定があった場合
      rg = Moji
    End If

    '上付きまたは下付き文字にする
    For ss = 1 To cot - 1
      If UPorDW(ss) Then
        rg.Characters(p1(ss), p2(ss) - p1(ss) - 1).Font.Superscript = True
      Else
        rg.Characters(p1(ss), p2(ss) - p1(ss) - 1).Font.Subscript = True
      End If
    Next
  Next
End Sub

'上付きにするか下付きにするか判定する関数(上付きがTrue)
Public Function SUPERorSUBscript(Upot As Integer, Dpot As Integer)
  If Upot > 0 Then
    SUPERorSUBscript = True
    If Dpot > 0 Then
      If Dpot < Upot Then
        SUPERorSUBscript = False
      End If
    End If
  End If
End Function

この回答への補足

>質問にある平方メートルや立方メートルだけなら簡単にできますが、・・・
まさにそれが欲しかったりします。複数の人に浸透させ
たいので、できればルール入力なしでやりたいです。
mの後ろの3は上付にしたい(それ以後の文字は普通)
というマクロがあるだけで充分今より楽になります。
&よく使う化学記号は決まっていて、
H2SO4、H2O2、CaCO3、CaF2、--(OH)2
FeCl3、--(OH)3、NH3、NH4 (頻用順)です。
また、A列は化学記号が、C列にm3など単位つきの数字
(式)が入る項目である事が予想できる雛形を使用しての
作業です。選択範囲内だけに各定義のマクロをながす
こまめな方法になっても構いませんのでお教え下さい。
マクロは使いたいけど作り方やアレンジの仕方はさっ
ぱりわからないものでよろしくお願いします。

補足日時:2001/12/06 13:29
    • good
    • 0

>このサイトで見つけて化学式の方は解決したのですが、


どのように、解決されたのでしょうか?

それがわかれば、マクロについては、詳しい方が沢山居られますから、回答をもらえるかも知れません。補足お願いします。
    • good
    • 0

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

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

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

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

QデリカスペースギヤへCDオートチェンジャー取り付け

デリカスペースギヤ型式6G72へ手持ちのCDオートチェンジャーの取り付け、配線をする。この時の正面ハウジングの外し方、電源以外のCD側の配線が分解前に知りたい。

Aベストアンサー

これで合ってると思いますが
http://www.alpine-fit.jp/alpine/result2.cgi?YEARS=944&SEND=%81@%82n%82j%81@

Q下付を作るには?

凡例を作製したとき、下付文字を作製する事はできないのか?
という質問です。例えば数列の一般式an=a1+b(n-1)でanのnやa1の1。
他には化学式O2の2とO3の3など
お願いします。凡例でn,1,2,3の文字だけを小さくしようとしてもできませんでした。ヘルプにもなくて困っています(探し出してないかもしれませんが)

Aベストアンサー

sma4 ですよね?
ソフト名を書かないと回答ができません。(^_^;

sma4でしたらヘルプの「文字列の書き方」の部分に書いてあります。

以下、ヘルプファイルより
> ^~@で囲まれた文字は上付きで、_~@で囲まれた文字は下付きになります。

ですので、例の式は、
a_n@=a_1@+b(n-1)
こんなかんじですね。

QスペースシャワーTVでのCD音源

スペースシャワーTVに登録しました。

そこで編集して車で曲(動画ではなく曲だけ)を聴きたいと思ってるんですが、
できればPV音源ではなくCD音源がいいです。

CD音源の番組ってありますか?
ご存知の方よろしくお願いします。

Aベストアンサー

残念ながらCD音源(リニアPCM44.1メガヘルツ16ビットステレオ)であっても伝送路の問題で圧縮されてしまいます。

PVのマスター音源はCD以上の音質で録画されていますので残念です。

Qマクロを停止するマクロ

エクセル(2003)のマクロですが。
シートに CommandButton をふたつ貼り付け、ひとつ(CB1)はマクロをスタートさせ、もうひとつ(CB2)はマクロを停止させるボタンにしたいのですが。
CB2は、 Ctrl + Break と同様のことを実行し、実行中のマクロの内容に関わらず処理を停止できるようにしたいのですが。
CB2はどのような記述になるでしょうか?

Aベストアンサー

VBAではスレッド管理できませんが、元のコードにフラグを常に監視させるようにしておいて、別のコードからそのフラグを操作するという方法が使えます。
http://www.k2.dion.ne.jp/~jan2005/tips/excel1_6.html

DoEventsをしつこいぐらいに実行しておかないと、元のコードが走りっぱなしになって他からのイベントを受け付けないので注意。

Ctrl + Breakはそのまんま本当に強制停止なので、Sendkeyで強制停止されるのではなく、要はキャンセルボタンとして考えましょう。

QマイスペースCDについて

マイスペースCDで自作曲を販売できるそうですが、今からでも登録することは可能なのでしょうか。

Aベストアンサー

※販売登録の新規受付は2010年6月30日をもちまして終了させて
いただきました。

となっています。

参考URLの一番下です。

参考URL:http://www.myspace.com/myspacecdjp

Qexcelのマクロ選択用マクロ

お世話になります。
excelで分からない事があるので答えていただけたら幸いです。
質問の内容ですが、
同じシート内に、A,B,C,D,Eのマクロがあります。
これらのマクロを,プルダウンから選んで実行する為のマクロを作りたいのですが、可能でしょうか?
よろしくお願い致します。

Aベストアンサー

こんばんは。

ComboBox (名前はComboBox1)を設けて、以下の、EntryCombo(Auto_Openなどに設置) のように登録しておけば、動きます。ただし、こんなマクロは、ナンセンスだというのは言うまでもありません。マクロというものは、一定の時間を使い作業するものですから、ComboBox 等のドロップダウンのように速い動きには相応しくありません。マクロは基本的には不可逆ですから、確実な作業の意図を持って作動させるという意味を持たせなくてはなりません。したがって、マクロを設置するのは、コマンドボタンが最適です。

A,B,CC,D,E のそれぞれのマクロは、標準モジュールにおいてあります。

Private Sub ComboBox1_Change()
 Application.Run ComboBox1.Value
End Sub
Sub EntryCombo()
'Cという名称のマクロは、使えませんから、CCにします。
For Each v In Array("A", "B", "CC", "D", "E")
 ComboBox1.AddItem v
Next v
End Sub

たぶん、「いじらず」という言葉から、#2様のアドバイスが理解できていないような気がします。「いじる」とか「いじらない」という範疇にはないように思います。

>でも出来る事ならツールバーはいじらずにおきたいので、他に方法は無いでしょうか??

#2様の考え方は、私も経験的にベストです。ツールバーは、ツールバーの中で処理できます。一種のコンテナの役目をしますから、別のPCに移しやすいし、ブックが変わっても使えます。
簡単にユーザー設定のツールバーは出来ます。必要なければ、ツールバーをオフにすると、そのツールバーだけ出てきません。何度もマクロを失ったりした失敗から、やっと今のスタイルに落ち着きました。(Excel 2007 では、残念ながら、別の格好になってしまいます。)

#1様のアドバイスは、入力規則から実行する方法で、私には、すぐに意味が分かります。しかし、その意味がご理解出来ていないようです。元々無理な相談をあえて実行する方法ですから、そうしたイレギュラーな方法は、かなり難しいのではないでしょうか。

こんばんは。

ComboBox (名前はComboBox1)を設けて、以下の、EntryCombo(Auto_Openなどに設置) のように登録しておけば、動きます。ただし、こんなマクロは、ナンセンスだというのは言うまでもありません。マクロというものは、一定の時間を使い作業するものですから、ComboBox 等のドロップダウンのように速い動きには相応しくありません。マクロは基本的には不可逆ですから、確実な作業の意図を持って作動させるという意味を持たせなくてはなりません。したがって、マクロを設置するのは、コマンドボタンが...続きを読む

QCD-ROMからDVD-RAMドライブに交換したい(省スペースPC)

IBM6826-43J(省スペース)を使っています。
何もわからずにDVD-RAMドライブ(IO DATA DVR-ABH8BK内臓型)を買ってしまいました。
CD-ROMからDVD-RAMドライブに交換したいのですが、やり方がわからず困っています。壊したくないので業者の人に頼もうかなとも考えています。
交換できる方法を知っている方がいらっしゃったら、自分でやろうかと思っています。
もしくは安全にドライブ交換をやってくれるところを教えていただければと思います。ちなみに私は溝の口(川崎市)に住んでいるので持っていくならなるべく近くがいいです。

Aベストアンサー

省スペース型ですがサイズ的には問題ないようです。
http://ss.iodata.co.jp/Matching?scene=Category&makercd=003&typecd=102&pccode=60120&catecd=181

ドライブの交換は“それほど”難しいものではないと思います。ただあなたのスキルが全くわかりませんので、難しさの度合いも人それぞれと思います。
自分でPCを開けてしまえば保証は効かなくなることを念頭に置いて下さい。あとは勢いです。時間をかけて、広々としたスペースを作って、ケースはドライバーで簡単に開くと思います。ネジを外したら箱を上に持ち上げて外すのか、スライドさせるのかは見てみないとわかりません。
開けて見ると、省スペース型ですからスッキリと収まっていると思います。ドライブは脇でネジ止めされていると思います。今までのを外したら、新しいドライブのマスター・スレーブ設定をそれに合わせて組み込みます。

それだけです。

あとは添付ソフト(B's Recorder GOLD BASIC Ver.7が入っていますね)をインストール。これがなきゃ焼けませんので。

一度PCを開けるとクセになると思います。
メモリも128MBでは心許ないので増設された方がいいと思います。
http://kakaku.com/prdsearch/detail.asp?PrdKey=05206010480

参考URL:http://www.iodata.jp/sp/setup/page/naibu_c.html

省スペース型ですがサイズ的には問題ないようです。
http://ss.iodata.co.jp/Matching?scene=Category&makercd=003&typecd=102&pccode=60120&catecd=181

ドライブの交換は“それほど”難しいものではないと思います。ただあなたのスキルが全くわかりませんので、難しさの度合いも人それぞれと思います。
自分でPCを開けてしまえば保証は効かなくなることを念頭に置いて下さい。あとは勢いです。時間をかけて、広々としたスペースを作って、ケースはドライバーで簡単に開くと思います。ネジを外したら箱を上に...続きを読む

Qマクロ初心者です。エクセルのマクロについてです。

現在知識が全くない状態でマクロを使ったプログラミングを改良しようとしています。

現在のプログラミングでは、与えられたデータをあらかじめ計算し、その値を直接プログラミングに組み込んでます。
今回は直接プログラムに打ち込んである値を、別シートのマクロで自動的に計算し、その結果をプログラムが読み込むようにしたいと思います。

簡単に言えば、マクロのプログラムに直接計算結果を組み込むのではなく、別シートで計算したものをプログラムに組み込みたいということです。


例として、
100円と200円の商品を買い、それを二人で半分ずつ支払う計算結果と
200円と400円の商品を買い、それを二人で半分ずつ支払う計算結果
をプログラムに組み込むとすると、現在では一人あたり150円と、300円という数字を直接プログラムに打ち込んでいます。
これを、別シートで計算し、それをマクロのプログラムに読み込ませることは可能でしょうか?
また、可能ならば、大体の流れはどういったものになるのか教えてもらえませんでしょうか?
よろしくお願いします。

Aベストアンサー

たとえば。
sub macro1()
 dim res
 res = 1 + 2
 range("A1") = res
end sub

こういった具合に,「res」という計算結果をA1セルに記入します。
resの具体的な計算内容は,「1+2」という具合にマクロに直接記入されています。


これを。
sub macro2()
 dim x1, x2, res
 x1 = worksheets("Sheet2").range("A1").value
 x2 = worksheets("Sheet2").range("A2").value
 res = x1 + x2
 worksheets("Sheet1").raneg("A1") = res
end sub

こういった具合に,「resの結果をA1に記入する」は同じですが,
resの具体的な計算内容として
1.シート2のA1をX1に一回受ける
2.シート2のA2をX2に一回受ける
3.X1とX2を使ってresを計算する

といった段取りで組み立てることができます。


#補足
こういう内容は,エクセルマクロの「一番最初の基礎」です。
基礎過ぎて,いろんな書きぶり(=応用)ができるので,恐らく様々な回答が寄せられて,見ているだけでもオナカイッパイになってしまうと思います。
どれでなきゃならないってのも無いので一つずつマスターしていって欲しいとは思いますが,今は目の前の仕事優先で「マクロの勉強がしたい」んじゃないと思いますので,どれでも一個使ってやっつけてください。

たとえば。
sub macro1()
 dim res
 res = 1 + 2
 range("A1") = res
end sub

こういった具合に,「res」という計算結果をA1セルに記入します。
resの具体的な計算内容は,「1+2」という具合にマクロに直接記入されています。


これを。
sub macro2()
 dim x1, x2, res
 x1 = worksheets("Sheet2").range("A1").value
 x2 = worksheets("Sheet2").range("A2").value
 res = x1 + x2
 worksheets("Sheet1").raneg("A1") = res
end sub

こういった具合に,「resの結果をA1に記入する」は同じです...続きを読む

Q省スペース機にCD-RからDVDに入れ替え。

書き込み型DVD機を現在のCD-R(W)機と入れ替えを考えています。
マシンはWIN2000でCPUはPENIII800mhzの省スペース機です。
ベースは富士通のFMVですが、HDD、OS,メモリー等入れ替えてますのでもう保証はありません。

さて入れ替えようのDVDデッキですが、店頭で見たところ、動作環境等ほとんど書いてなくて、対応OSくらいの表示しかない商品がほとんどでした。
本題ですが、私のパソコンスペックでも十分使い物になるのでしょうか?
DVDの使い方は、昔の8mmビデオをDVD保存用に変換することを主な目的としています。

しかしながら、現状ではそのための知識も殆ど無くてデッキを入れ替えてから一から勉強です。
互換とかのことも教えていただけると幸いです。

Aベストアンサー

皆さんお答えの通りDVDドライブへの交換は簡単に出来るでしょう。

エンコード(動画[圧縮を含む]変換)やオーサリング(パソコンで見れる動画[aviやmpg等]を家庭用DVDで見れるVIDEO_TS形式に変換する事)に非常に時間がかかります。
自分の経験では、デジタルビデオカメラの編集作業がAthlonXP2000+のCPUでなんとか、2時間のものが倍の4時間で終わったと憶えてます。Pentium3の1Gで作業した時は寝て起きても自動編集してたような記憶が有ります。
今ならばCPUは3G以上のスペックをお勧めしますネ。

Qエクセルでマクロの実行回数をセル参照するマクロ

いつもお世話になっております。
A1の数字の分だけ印刷するマクロを以下のように理解しました。

Dim n As Integer
n = Application.WorksheetFunction.Sum(Worksheets("Sheet3").Range("A1"))

ActiveWindow.SelectedSheets.PrintOut Copies:=n, Collate:=True

これとは別に、
B1の数字(値)を参照して、
”マクロ2”というマクロの実行回数を指定したいのです。

単に一回実行するだけなら
Application.Run "マクロ2"
ですね。

実行回数を指定する場合、
どのように記述すればよいかご教示ください。
よろしくお願いします。

Aベストアンサー

>A1の数字の分だけ印刷するマクロを以下のように理解しました。

A1に確実に数値が入力されているなら、
Dim n As Integer
n = Worksheets("Sheet3").Range("A1")
だけで十分です。
複数のセルが対象なら、sum関数(Application.WorksheetFunction.Sum() )を利用するのも良いでしょう。

繰返しなら、
For i=1 to n
Call マクロ名
Next


人気Q&Aランキング

おすすめ情報