【無料配信♪】Renta !全タテコミ作品第1話

お世話になります。
C#2010で開発しております。ほぼ初心者です。
EXCELの指定のセルに、添付の入力規則をつけたいと考えております。
この設定をコードで記述したいのですが、わからずに悶々としております。

恐れ入りますが、お分かりになる方はご教示いただけますでしょうか。

以上宜しくお願い申し上げます。

「C# EXCELセルの入力規則設定につい」の質問画像

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

A 回答 (3件)

Microsoft.Office.Interop.Excelを使われるのでしたら、MSDNを見て調べてコード化するのが良いと思います。


あくまでInteropなので2.0の頃と変わってないはずですが、当時よりは様々なドキュメントが整備されています。

参考URL:http://msdn.microsoft.com/ja-jp/library/microsof …(v=office.11).aspx
    • good
    • 0
この回答へのお礼

お礼遅くなりまして申し訳ございません。並びにご教示いただきましてありがとうございました。いただきました情報を参考に頑張ってみます。

お礼日時:2015/02/09 11:07

EXCELの操作であれば、


C#ではなくVBAを利用したほうが無難です。

VBAだとこのようになります
https://gist.github.com/anonymous/8bafe9377ccff3 …

この回答への補足

早速のご回答誠にありがとうございました。
VBAについては、ACCESSの画面作成の経験はあるのですが、EXCELでも画面作成は可能なものなのでしょうか。アプリケーション作成の内容としましては、画面からボタンをクリックした時にEXCLEを新規作成し、作成したEXCELファイルのセルの一部を選択できるようにしたいことが目的です。
度々恐れ入りますがご教示いただければ幸いに存じます。
以上宜しくお願い申し上げます。

補足日時:2014/12/08 00:17
    • good
    • 0
この回答へのお礼

お礼遅くなりまして申し訳ございません。VBAで設定できること確認しました。ありがとうございました。

お礼日時:2015/02/09 11:08

コードということはC#から制御をしたいのですよね?



C#でEXCELフォーマットを扱う時は、通常ライブラリを使います。まず使っているライブラリを教えてください。
初心者で、1からこの制御を行いたいというのであれば、できれば別の方法を検討された方が良いです。
おそらく思っているよりも高度な知識を必要とする分野だからです。

この回答への補足

早速のご回答誠にありがとうございます。
開発内容としましては.NET4.0(C#orVB)の画面からボタンをクリックした時にEXCLEを新規作成し、作成したEXCELファイルのセルの一部を選択できるようにしたいことが目的です。
Microsoft.Office.Interop.Excelを使用しEXCELファイルを作成し、ドロップダウンリストを埋め込みたいと考えております。
一応C#.NET2.0であれば開発経験は長いのですが、.NET4.0はほとんど経験がないため、初心者と記述してしまいました。
もし高度なことでもコードをいただけるのであれば理解できるかと思いますので、ご回答いただければ幸いに存じます。
以上宜しくお願い申し上げます。

補足日時:2014/12/08 00:12
    • good
    • 0

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QEXCEL入力規則のリスト設定でのEXCELプロセスの解放について

お世話になります。
vb.net2010で、Windows8.1上のexcel2013を操作するアプリケーションを開発しております。

特定のセルに入力規則のリストを設定する処理を記述しております。
しかしながら以下を実行後、バックグランドプロセスにEXCELのプロセスが残ってしまいます。
何かが解放されていないと思われますが、何が解放されていないのかわからない状態で困っております。
恐れ入りますが、何が原因かおわかりになる方はご教示いただけないでしょうか。

参照内容は以下になります。
参照名:Microsoft.Office.Interop.Excel
種類:.NET
バージョン:14.0.0.0

コードは以下になります。

Imports Microsoft.Office.Interop

Dim xlsApp As Excel.Application = Nothing
Dim xlsbooks As Excel.Workbooks = Nothing
Dim xlsbook As Excel.Workbook = Nothing
Dim xlsSheets As Excel.Sheets = Nothing
Dim xlsSheet As Excel.Worksheet = Nothing
Dim xlsRange As Excel.Range = Nothing
Dim xlsValidation As Excel.Validation = Nothing

Try

xlsApp = New Excel.Application()
xlsApp.Visible = False
xlsbooks = xlsApp.Workbooks
xlsbook = xlsbooks.Open(strWeeklyReportPath)
xlsSheets = xlsbook.Worksheets
xlsSheet = DirectCast(xlsSheets(1), Excel.Worksheet)


xlsRange = xlsSheet.Range("B2")
xlsRange.Validation.Add(Excel.XlDVType.xlValidateList, Formula1:="東京、大阪、名古屋")
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRange)

Finally

If xlsValidation IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsValidation)
End If
If xlsRange IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRange)
End If
If xlsSheet IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheet)
End If
If xlsSheets IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheets)
End If
If xlsbook IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsbook)
End If
If xlsbooks IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsbooks)
End If
If xlsApp IsNot Nothing Then
xlsApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)
End If
GC.Collect()

End Try

ご教示いただけますようお願い申し上げます。
以上宜しくお願い申し上げます。

お世話になります。
vb.net2010で、Windows8.1上のexcel2013を操作するアプリケーションを開発しております。

特定のセルに入力規則のリストを設定する処理を記述しております。
しかしながら以下を実行後、バックグランドプロセスにEXCELのプロセスが残ってしまいます。
何かが解放されていないと思われますが、何が解放されていないのかわからない状態で困っております。
恐れ入りますが、何が原因かおわかりになる方はご教示いただけないでしょうか。

参照内容は以下になります。
参照名:Microsoft...続きを読む

Aベストアンサー

> ご回答ありがとうございます。申し訳ございませんが、具体的にどのようなコードかご教示いただけますでしょうか。

xlsRange.Validation.Add(Excel.XlDVType.xlValidateList, Formula1:="東京、大阪、名古屋")
  ↓
xlsValidation = xlsRange.Validation
xlsValidation.Add(Excel.XlDVType.xlValidateList, Formula1:="東京、大阪、名古屋")

QC#でのExcel操作について.(Rangeオブジェクトへの複数範囲設定)

C#でExcelのグラフを作成させるプログラムを書いるのですが,Rangeオブジェクトへの離れたセルの複数範囲を指定したいのですが,いろいろ調べてみましたがどうしても解決できません.
調べた限りではVBではできるようですが,C#ではできないのでしょうか?

Excel.ChartObjects chartObjects =(Excel.ChartObjects)oSheet.ChartObjects(Type.Missing);
Excel.ChartObject chartObj = chartObjects.Add(100, 100, 700, 400);
Excel.Chart chart = chartObj.Chart;
Excel.Range chartRange = oSheet.get_Range("B1","B3");
/*↑の部分で("B1:B3,B5:B8,C5")のようなことをしたいです.RangeにAddメソッドのようなものがあればと思っているのですが無いみたいなので‥‥*/
chart.SetSourceData(chartRange,Excel.XlRowCol.xlColumns);
Excel.SeriesCollection seriesCollection=(Excel.SeriesCollection)chart.SeriesCollection(Type.Missing);

よろしくお願いします.

C#でExcelのグラフを作成させるプログラムを書いるのですが,Rangeオブジェクトへの離れたセルの複数範囲を指定したいのですが,いろいろ調べてみましたがどうしても解決できません.
調べた限りではVBではできるようですが,C#ではできないのでしょうか?

Excel.ChartObjects chartObjects =(Excel.ChartObjects)oSheet.ChartObjects(Type.Missing);
Excel.ChartObject chartObj = chartObjects.Add(100, 100, 700, 400);
Excel.Chart chart = chartObj.Chart;
Excel.Range chartRange = oSheet.get_Rang...続きを読む

Aベストアンサー

Excel.Range chartRange = oSheet.get_Range("B1:B3,B5:B8,C5", Missing.Value);
でよいのではないでしょうか?
(Missingは using System.Reflection)
(私はC#の知識は全くありませんがVC# 2005 Express Editionで確認しました)

参考URL:http://support.microsoft.com/default.aspx?scid=kb;ja;302096

QExcelでセルを次の行の先頭の列に移動させる方法を教えてください。

Excelでセルを次の行の先頭の列に移動させる方法があれば教えてください。
例えば、A1、B1、C1と順に入力し、C1のセルでEnterキーを押すと次の行の先頭列A2に入力セルが移動されるといった場合です。

Aベストアンサー

ツールバーのオプションで 編集のタブ 入力後の移動を 右 に設定しておきます。
入力範囲
仮に A1~C10までを選択して
A1入力 Enter B1入力 Enter C1入力 Enter おすと
A2に移動すると思います。

QDataGridViewのチェックボックスのON、OFFの判定方法

お世話になります。ご協力お願いします。
環境:VS2008 .Net FrameWork3.5
言語:C#

質問内容:ボタンを押下したら、DataGridViewの列に設定したチェックボックスのON,OFFを判定して処理を行いたい。
現状以下の方法で実現は出来ていますが、とても回りくどい方法になっています。
正しい処理を教えて頂けないでしょうか。

1.DataGridViewにて、列にチェックボックスを設けている。
2.truevaluesプロパティにtrueをセットしている。

ボタンを押下したらチェックボックスのON、OFFを判定する為に、DataGridViewの行を
ループさせて判定させています。

for(int i=0;i < DataGridView.Count;i++){
___if((string)DataGridView.Rows[i].Columns[0].values == "true")
___{
______処理
___}
}

お願い致します。

Aベストアンサー

 こんばんは。

 正しいかどうかは断言出来ませんが、要はチェックボックスの「on, off」を確認しながらループするのが非効率的なので、ループ回数を「on」の個数だけに留めたいと言う事でしょうか。

 でしたら、以下URLに記載されているイベントハンドラを応用して、
 http://dobon.net/vb/dotnet/datagridview/datagridviewcheckboxcolumn.html

 セルのチェックボックスが「on, off」された瞬間に、セルのROW番号をハッシュテーブルに向かって「登録、解除」をしていけば、結果として「on」になっているセルのROW番号だけを保持する事になります。

 「Dictionaryジェネリッククラス」
 http://msdn.microsoft.com/ja-jp/library/xfhwa508(VS.80).aspx

 以下参考程度に。

//ハッシュテーブル(trueのROW番号だけを記録するDictionary<Key, Value>だが、今回の事例では両方とも同じROW番号を入れる)
private Dictionary<int, int> boolMapper;

private void Form1_Load(object sender, EventArgs e)
{
//作成
this.boolMapper = new Dictionary<int, int>();
}

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (this.dataGridView1.CurrentCellAddress.X == 0 && this.dataGridView1.IsCurrentCellDirty)
{
this.dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}

//チェックボタンが「on, off」された瞬間に呼ばれるイベントハンドラ
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && this.dataGridView1.Columns[e.ColumnIndex].ValueType == typeof(bool))
{
//チェックボタンが「on」になったのでハッシュテーブルに登録
if ((bool)this.dataGridView1[e.ColumnIndex, e.RowIndex].Value == true)
{
this.boolMapper.Add(e.RowIndex, e.RowIndex);
}
//チェックボタンが「off」になったのでハッシュテーブルから除外
else
{
this.boolMapper.Remove(e.RowIndex);
}
}
}

//ボタン1を押した時に呼ばれるイベントハンドラ
private void button1_Click(object sender, EventArgs e)
{
//ハッシュテーブルの要素個数分だけ回転する
foreach(KeyValuePair<int, int> kvp in this.boolMapper)
{
//ココで何かする「kvp.Value / kvp.Key」どちらにも同じ数字が入っているのでどちらを使用するかは問わない
this.dataGridView1[0, kvp.Value];
}
}

 こんばんは。

 正しいかどうかは断言出来ませんが、要はチェックボックスの「on, off」を確認しながらループするのが非効率的なので、ループ回数を「on」の個数だけに留めたいと言う事でしょうか。

 でしたら、以下URLに記載されているイベントハンドラを応用して、
 http://dobon.net/vb/dotnet/datagridview/datagridviewcheckboxcolumn.html

 セルのチェックボックスが「on, off」された瞬間に、セルのROW番号をハッシュテーブルに向かって「登録、解除」をしていけば、結果として「on」になっ...続きを読む

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

Q同じソリューション内の別のプロジェクトのメソッド呼び出し

同じソリューション内の別のプロジェクトのメソッド呼び出し

お世話になっております。
Visual Studio でC#で開発をしております。
初心者です。

同じソリューション内にある別のプロジェクトのメソッドを呼び出す方法は
どの様にしたら宜しいのでしょうか。
下記の様に記述しましたら、
「静的でないフィールド、メソッド、またはプロパティ ~省略~ で、
 オブジェクト参照が必要です」と言うエラーが出てしまいます。
何か根本的に間違っているのかも知れません。

何卒、ご教授頂きたく宜しくお願い致します。

        記

呼び出し側
private void button1_Click(object sender, EventArgs e)

  呼び出し先のプロジェクト名.クラス名.メソッド名();
 }


呼び出される側
namespace プロジェクト名

public class クラス名

   メソッド名()
   {
     処理内容
    }
  }
 }

Aベストアンサー

ソリューション エクスプローラにおいて、呼び出し側のプロジェクト ツリーの「参照設定」を右クリックして、「参照の追加」を実行、ダイアログの「プロジェクト」タブにおいて、呼び出される側のプロジェクトを選択してOKを押してください。
Visual C#のインテリセンスが正常に機能し始めれば設定が成功しています。

なお、参照設定の追加により、参照されるアセンブリは参照するプロジェクトの出力フォルダに自動的にコピーされるようになります。
また、被参照アセンブリのプログラム デバッグ データベース ファイル(.pdb)も自動的にコピーされるので、被参照側のソースにブレークポイントを置いて参照側でデバッグを開始すると、きちんとブレークポイントで停止してくれます。

QExcelで2つのファイルの違い(Diff)をとりたい

Excelでファイル名が同じで更新日付の異なる2つのファイルがあります。
この2つのファイルで内容が変わっている部分を知りたいのですが、良い方法はあるでしょうか?
(もしくは内容が変わっているかどうかだけでも知りたい)

比較が必要なファイルが大量にあるため、一つずつ見比べる時間が無く、困っています。

Aベストアンサー

使ってないのでお勧めはわかりませんが、こちらのフリーソフトを試してみては?
http://search.vector.co.jp/search?query=excel+%94%E4%8Ar

Qデータグリッドビューの一番最初の行に列を追加したい

お世話になっています。
VB2005です。
タイトル通りなのですが、DataGridViewの一番最初の列(0列目)に列を追加したいのです。
DataGridView1.Columns.Add()
では一番最後の行に追加されてしまいます。

ヘルプやネット上を見てもわからず・・・
どなたかご存じの方教えてください。

Aベストアンサー

こんばんは。

AddではなくInsertを使います。

TextBoxColumnを追加します。

Dim TextBoxColumn As New DataGridViewTextBoxColumn
Me.DataGridView1.Columns.Insert(0, TextBoxColumn)

でとりあえず追加できます。

後はヘッダーに項目名を設定したり、列幅を設定し足してください。

QC#で共有変数の定義をするには

C#で共有変数の定義をするには、どうしたらよいでしょうか。具体的には、起動パラメータで、任意の文字列(3~4バイト)を渡して、C#アプリケーションを、起動し、プログラムの任意の場所で、そのパラメータを参照したいと考えています。起動パラメータの受け取りは、できるのですが、そのパラメータを、プログラムのどこからも参照できる領域(ここの定義方法が不明)に格納するには、どうしたらよいでしょうか。(2重起動を許す前提です。実行時に1つの目のプログラムにはパラメータ"XYZ"を渡し、2つ目のプログラムを起動時にはパラメータ"ABCD"を渡し、その値により、プログラムの動作を制御したいと思っています)
Windows-xp visual-studio2008 C#でwindowsアプリケーションを作成しています。

Aベストアンサー

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Form1());
    }
    // ここに記述
    static public string strArg = null;
  }
}

メインクラスのメンバーとしてスコープが有効な場所に記述します

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(n...続きを読む

QLEFT JOINが2つあるSQL文でANDの意味

■下記SQL文の意味を教えてください

SELECT a.*, b.being_name
FROM alive a
 LEFT JOIN being b ON a.hoge_id = b.id
 LEFT JOIN call c ON c.call_id = a.hoge_id
  AND f.hoge_id = 12
 WHERE f.hoge_id = 12 OR b.id = 12

※12の部分は動的に切り替わります

・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか?
・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか?

>SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式2
>「AND」は2つの条件式の論理積
・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか? それともこのSQLの「AND」は違う使い方をしているのでしょうか? 何か、LEFT JOINに関係しているのでしょうか?

■下記SQL文の意味を教えてください

SELECT a.*, b.being_name
FROM alive a
 LEFT JOIN being b ON a.hoge_id = b.id
 LEFT JOIN call c ON c.call_id = a.hoge_id
  AND f.hoge_id = 12
 WHERE f.hoge_id = 12 OR b.id = 12

※12の部分は動的に切り替わります

・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか?
・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか?

>SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式...続きを読む

Aベストアンサー

>・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか?
はいそうです。

>左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか?
はいそうです。(alive→beingって言うような意味です。)

>・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか?
「AND]は「WHERE」にかかっているのではなく「LEFT 」の結合の条件となります。
SELECT a.*, b.being_name
FROM alive a
LEFT JOIN being b ON a.hoge_id = b.id
LEFT JOIN call c ON (c.call_id = a.hoge_id AND f.hoge_id = 12)
WHERE f.hoge_id = 12 OR b.id = 12

<<追記>>
このSQLにはfというテーブルが存在しないのでエラーとなります。


人気Q&Aランキング