EXCEL,WORDで、EXCEL,WORDについての問題を作っているのですが、自動的に、答え合わせを おこないたいのですが、どの様に、プログラムを組めばよいのでしょうか。

または、VBプログラム以外にも、できる方法があったら、ぜひ、教えてください。お願いします。

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

A 回答 (1件)

質問、もうちょっと、具体的になりませんか?



たとえば、
「問題は、Excelのセルの中に書いてあって、解答者は、別のセルに答えを記入する方式でいきたい」とかなんとか・・・

>VBプログラム以外にも、
 とは、答えのファイルを作成して、メールで添付送信させるなどの方式も「良し」とするのかどうか
「VBAしか経験ないので、カンタンにできる範囲で・・」とか・・

ご質問の内容だけでは、「ありとあらゆる方法が可能」というような、回答になりそう・・・・
    • good
    • 0

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

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

QWord, Excel, PowerPointで2バイト文字検索

お世話になります。

Word, Excel, PowerPointのデータ(ファイル)にある2バイト文字を検索し、順番にハイライト表示(選択状態)にしていく処理をVBAで作りたいと考えています。
当方はC言語やPHPのプログラミングの経験はあるのですが、VBやVBAは初めてでして中々思うように作成が出来ません。

現在はとりあえず試験的に以下のようなプロシージャを作成し、メッセージボックスで表示するところまでは作成出来ています。

Sub check_2byte_stirngs(text As Object)
    moji_len = Len(text)
    byte_len = LenB(StrConv(text, vbFromUnicode))
    If (moji_len <> byte_len) Then
      '2バイト文字発見
      For i = 1 To Len(text)
        one_char = Mid(text, i, 1)
        If LenB(StrConv(one_char, vbFromUnicode)) <> Len(one_char) Then
          MsgBox one_char
        End If
      Next
    End If
End Sub

これに以下のような機能を追加したいと思っています。
・「次へ」を表示するダイアログを付ける(その場で編集可能にしたいのでMsgBoxは使わない)
・見つかった文字の場所までカーソルを移動させて選択状態にする

どちらか一方でもお分りの方がいらっしゃいましたら、ご教示願いますでしょうか。
以上、宜しくお願い致します。

お世話になります。

Word, Excel, PowerPointのデータ(ファイル)にある2バイト文字を検索し、順番にハイライト表示(選択状態)にしていく処理をVBAで作りたいと考えています。
当方はC言語やPHPのプログラミングの経験はあるのですが、VBやVBAは初めてでして中々思うように作成が出来ません。

現在はとりあえず試験的に以下のようなプロシージャを作成し、メッセージボックスで表示するところまでは作成出来ています。

Sub check_2byte_stirngs(text As Object)
    moji_len = Len(text)
  ...続きを読む

Aベストアンサー

UserForm1を追加。
TextBox1とCommandButton1を貼り付ける。
CommandButton1のCapntionを「次へ」に変更。

そして、UserForm1のコードに以下を書きます。

'-------------------------------
'ユーザーフォーム (UserForm1)
'-------------------------------
'次へボタン(CommandButton1の処理)
Private Sub CommandButton1_Click()
Unload Me
End Sub

'ユーザフォームの外部からTextBoxに文字を表示するメソッド
Public Sub DspText(Text As String)
TextBox1.Text = Text
End Sub

次に標準モジュールを追加して、コードに以下を書きます。

'-------------------------------
'標準モジュール
'-------------------------------
Sub check_2byte_stirngs(Text As String)
Dim moji_len As Integer
Dim byte_len As Integer
Dim i As Integer
Dim one_char As String

moji_len = Len(Text)
byte_len = LenB(StrConv(Text, vbFromUnicode))
If (moji_len <> byte_len) Then
'2バイト文字発見
For i = 1 To Len(Text)
one_char = Mid(Text, i, 1)
If LenB(StrConv(one_char, vbFromUnicode)) <> Len(one_char) Then
DspText one_char
End If
Next
End If
End Sub

'MsgBoxの代わりに編集可能なダイアログを表示する
Private Sub DspText(Text As String)
Load UserForm1
With UserForm1
.DspText Text
.Show vbModal
End With
End Sub

そして、必要なところで
check_2byte_stirngsを使えばお望みの1つ目
>「次へ」を表示するダイアログを付ける(その場で編集可能にしたいのでMsgBoxは使わない)
ができたかと思うのですがこういうことですか?

UserForm1を追加。
TextBox1とCommandButton1を貼り付ける。
CommandButton1のCapntionを「次へ」に変更。

そして、UserForm1のコードに以下を書きます。

'-------------------------------
'ユーザーフォーム (UserForm1)
'-------------------------------
'次へボタン(CommandButton1の処理)
Private Sub CommandButton1_Click()
Unload Me
End Sub

'ユーザフォームの外部からTextBoxに文字を表示するメソッド
Public Sub DspText(Text As String)
TextBox1.Text = Text
End Sub
...続きを読む

Q自製AP実行中にMS-WORD,EXCELが起動出来ません

VB5でORACLE8のデータを読みMS-ACCESSに出力するプログラムを使用
しています。何十万件ものデータを扱う為に処理時間に30分~1時
間程掛かるのですが、その処理中にMS-WORD,EXCELを使用したくて、
エクスプローラからファイルをダブルクリックしても、砂時計のまま
MS-WORD,EXCELが反応せず、VBの抽出処理が終ると同時にMS-WORD,EXC
ELも起動します。この現象はWINDOWS95で発生しWINDOWS98ではこの現
象が出ません。
毎日数回行う処理なので待ち時間が馬鹿にならず困っております。
どなたかこういった経験をお持ちで無いでしょうか?

ちなみに待っている間はスクリーンセーバも動かずこちらも抽出終了
と同時に起動します。

以上、宜しくお願い致します。

Aベストアンサー

おそらく件数分まわるループなどがあるのでは?
VB製のEXEが処理を独占していると思うので
DoEvents
をループ内に入れて、制御をOSに渡してみてはどうでしょう。
>30分~1時間
これよりも処理がかかるようになりますが、プログラムとOSの処理を並走させるのであれば、しかたのないこと・・・

はずしていたら、すいません。

Q(VB初心者) VB起動時既に起動されているExcelの情報

VisualBasic 6.0 初心者です。
既に起動しているExcelの後にVisualBasicを立ち上げた場合、
既に起動しているExcelの情報を得ることが出来るのでしょうか?
やりたい事は
Excel起動⇒VB起動⇒Excelのセルを選択⇒そのセルに入力されている値
を取得。
VB起動⇒Excel起動の場合はActiveCellの値を取得出来たのですが
既に起動しているExcelの場合 エラー になってしまいます。
お手数ですが、ご教授願います。

Private Sub コマンド1_Click()
MsgBox ActiveCell
End Sub

'Form_Load時にこれを実行しないと開いたExcelのアクティブセル値を得られない??
Private Sub Form_Load()
MsgBox ActiveCell
End Sub

Aベストアンサー

http://okwave.jp/qa4895039.html

と照らし合わせても、提示されているコードをVB6.0で行なうとエラーになり、VBAであれば取得できるようなんです。

コードがVB6.0に書かれているのかVBAに書かれているのか、わからないのです。
⇒質問はExcelVBAの事のように思えてしまいます。

一応VB6.0でExcelの起動確認と値取得をコマンドボタンで実行したものは、

Private Sub Command1_Click()
Dim xlApp As Object

On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")

If xlApp Is Nothing Then
MsgBox "Excelは起動してません"
Else
MsgBox "Excelは起動してます" & vbLf & xlApp.ActiveCell
End If

On Error GoTo 0

Set xlApp = Nothing
End Sub

でした。
⇒Form_Loadでは何もしてません。

http://okwave.jp/qa4895039.html

と照らし合わせても、提示されているコードをVB6.0で行なうとエラーになり、VBAであれば取得できるようなんです。

コードがVB6.0に書かれているのかVBAに書かれているのか、わからないのです。
⇒質問はExcelVBAの事のように思えてしまいます。

一応VB6.0でExcelの起動確認と値取得をコマンドボタンで実行したものは、

Private Sub Command1_Click()
Dim xlApp As Object

On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")

If xlApp Is No...続きを読む

QExcel VBAでグラフ作成。A,C列をx値, B,D列をy値にした複数プロット

ExcelのVBAでグラフをChartType = xlXYScatterLinesでグラフを作っています。仮に各列10行でAからF列までデータがあるとします。
Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
With chartObj.Chart
.ChartType = xlXYScatterLines
.SetSourceData Worksheets(1).Range("A1:F10"), _
PlotBy:=xlColumns
.HasLegend = False
End With

上記のようにしてしまうと、x値がA1:A10で、y値がB1:B10,C1:C10・・・・のプロットが5本作成されてしまいます。

以下のようにするにはどうすればよろしいでしょうか。
第一のプロットはx値をA1:A10, y値をB1:B10としてグラフを作成します。次にこのグラフにx値をC1:C10, y値をD1:D10とした第二のプロットを追加、同様に第三はx値をE1:E10, y値をF1:F10としてプロットを追加したグラフを作成したいのですが、このようなグラフはVBAで作成可能でしょうか。

本番のグラフは行数と列数はいろいろな場合があるので、行数と列数のパラメータに任意の値を代入し、Forループで様々な形態に対応できるものを作りたいと考えています。

ExcelのVBAでグラフをChartType = xlXYScatterLinesでグラフを作っています。仮に各列10行でAからF列までデータがあるとします。
Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
With chartObj.Chart
.ChartType = xlXYScatterLines
.SetSourceData Worksheets(1).Range("A1:F10"), _
PlotBy:=xlColumns
.HasLegend = False
End With

上記のようにしてしまうと、x値がA1:A10で、y値がB1:B10,C1:C10・・・・のプロットが5本作成されてしまいます。

以下のようにするにはどうすれ...続きを読む

Aベストアンサー

Dim chartObj As ChartObject
Dim r As Range
Dim i As Long

Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
Set r = Worksheets(1).Range("A1:F10")
With chartObj.Chart
  .ChartType = xlXYScatterLines
  .HasLegend = False
  For i = 1 To 5 Step 2
    With .SeriesCollection.NewSeries
      .XValues = r.Columns(i)
      .Values = r.Columns(i + 1)
    End With
  Next
End With

Set r = Nothing
Set chartObj = Nothing

...こんな感じ。
普通に手作業で作成するものをマクロ記録すればヒントになるでしょう。
後から系列を追加すればいいわけです。

>本番のグラフは行数と列数はいろいろな場合があるので...
...に対応させる一例としては以下。

Const MN = 1 'データ開始行
Const MX = 10 'データ個数
Dim chartObj As ChartObject
Dim x, y
Dim z As Long
Dim i As Long

x = VBA.Array(1, 3, 5) 'x値の列
y = VBA.Array(2, 4, 6) 'y値の列
Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
With chartObj.Chart
  .ChartType = xlXYScatterLines
  .HasLegend = False
  For i = 0 To UBound(x)
    With .SeriesCollection.NewSeries
      .XValues = Cells(MN, x(i)).Resize(MX)
      .Values = Cells(MN, y(i)).Resize(MX)
    End With
  Next
End With

Set chartObj = Nothing

Dim chartObj As ChartObject
Dim r As Range
Dim i As Long

Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
Set r = Worksheets(1).Range("A1:F10")
With chartObj.Chart
  .ChartType = xlXYScatterLines
  .HasLegend = False
  For i = 1 To 5 Step 2
    With .SeriesCollection.NewSeries
      .XValues = r.Columns(i)
      .Values = r.Columns(i + 1)
    End With
  Next
End With

Set r = Nothing
Set chartObj = Nothing

.....続きを読む

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む


人気Q&Aランキング

おすすめ情報