お世話になります。
C#を使用してExcelアドインを作成した際の実行速度の向上と
右クリックメニューに追加した際の不思議な現象についてお聞きしたいです。
作成中のアドインは選択範囲内の、全角英数字を半角英数字に変換するという物を作成しています。
現在、10万セルの処理速度は45秒程度なのでこれの速度向上をする方法をお聞きしたいです。
また、右クリックメニューに表示される場合とされない場合があります。
同じブック内の別のワークシートで右クリックをしても表示されない場合がありました。
当方ではこの現象について検討もつかないためご教授のほどよろしくお願いいたします。
c#
1using System; 2using System.Drawing; 3using System.Collections.Generic; 4using System.Linq; 5using System.Text; 6using System.Windows.Forms; 7using System.Xml.Linq; 8using Excel = Microsoft.Office.Interop.Excel; 9using Office = Microsoft.Office.Core; 10using Microsoft.Office.Tools.Excel; 11 12using CSharp.Japanese.Kanaxs; 13 14namespace myAddin 15{ 16 public partial class ThisAddIn 17 { 18 private Office.CommandBarButton MenuText; 19 20 private void DefineMenu() 21 { 22 Office.MsoControlType menuItem = Office.MsoControlType.msoControlButton; 23 24 MenuText = (Office.CommandBarButton)Application.CommandBars["Cell"].Controls.Add(menuItem, missing, missing, 1, true); 25 26 MenuText.Style = Office.MsoButtonStyle.msoButtonCaption; 27 MenuText.Caption = "変換"; 28 MenuText.Tag = "0"; 29 } 30 31 private void ThisAddIn_Startup(object sender, EventArgs e) 32 { 33 DefineMenu(); 34 35 MenuText.Click += new Office._CommandBarButtonEvents_ClickEventHandler(ZenToHan); 36 } 37 38 private void ThisAddIn_Shutdown(object sender, EventArgs e) 39 { 40 } 41 42 void ZenToHan(Office.CommandBarButton Ctrl, ref bool CancelDefault) 43 { 44 //タイマー 45 46 var sw = new System.Diagnostics.Stopwatch(); 47 sw.Start(); 48 49 50 //ダイアログ表示 51 DialogResult result = MessageBox.Show("実行しますか?", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation); 52 53 //ダイアログがOKなら実行 54 if (result == DialogResult.OK) 55 { 56 var selectedRange = Globals.ThisAddIn.Application.Selection as Excel.Range; 57 var selectedAreas = selectedRange.Areas as Excel.Areas; 58 59 int i = 0; 60 61 //選択中セルを全ループ 62 foreach (Excel.Range area_i in selectedAreas) 63 { 64 int r = 1; 65 foreach (Excel.Range row in area_i.Rows) 66 { 67 int c = 1; 68 foreach (Excel.Range col in row.Columns) 69 { 70 col.Value = KanaEx.ToHankaku(col.Value); 71 72 c++; 73 CountLoop++; 74 } 75 r++; 76 } 77 i++; 78 } 79 80 //タイマーストップ表示 81 82 sw.Stop(); 83 TimeSpan ts = sw.Elapsed; 84 MessageBox.Show($" {ts}"); 85 86 } 87 } 88 89 #region VSTO で生成されたコード 90 91 /// <summary> 92 /// デザイナーのサポートに必要なメソッドです。 93 /// このメソッドの内容をコード エディターで変更しないでください。 94 /// </summary> 95 private void InternalStartup() 96 { 97 this.Startup += new System.EventHandler(ThisAddIn_Startup); 98 this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); 99 } 100 101 #endregion 102 } 103} 104
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。